Fragestellung:
Ziel dieser Arbeit ist es zu ermitteln, welche der ausgewählten demografischen Faktoren (Alter, Geschlecht, Einwohnerzahl, Einkommen, Bildung und Politik) und geografischen Faktoren (Impfzentren, Ordinationen, öffentliche Verkehrsanbindungen) einen wesentlichen Einfluss auf die Impfquote darstellen.
Hierzu würden wir in einem Raster der Wiener Gemeindebezirke die Haltestellen der Wiener Linien sowie der Impfstellen darstellen. Ziel soll es sein, die Anzahl der Haltestellen in einem gewissen Radius zu den Impfstellen zu ermitteln. Dadurch kann die Anzahl der Haltestellen in der unmittelbaren Umgebung zu den Impfstellen summiert werden. Die Anzahl der Impfstellen sowie die Anzahl der erwähnten Haltestellen je Bezirk dienen als die zwei geographischen Faktoren und fließen in die Korrelationsbestimmung ein.
Ausgewählte demographischen Faktoren, bestehend aus Bildungsstand, der Geschlechterverteilung, der Altersverteilung sowie die politische Verteilung je Bezirk, sollen nicht in absoluten Zahlen bemessen werden, sondern durch eine prozentuelle Verteilung der jeweiligen Gruppe/Kategorie an der Gesamtheit der Kategie pro Bezirk dargestellt werden.
Zur Beantwortung der Fragestellung wurden im ersten Schritt alle dafür benötigten Datensätze zusammengetragen. Nachfolgend findet sich eine Aufstellung sowie Beschreibung aller verwendeten Datensätze.
| Beschreibung | Erläuterung |
|---|---|
| Link: | https://www.data.gv.at/katalog/dataset/d76c0e8b-c599-4700-8a88-29d0d87e563d |
| Format: | CSV |
| Bezeichnung: | fin-bez-inc |
| DISTRICT_CODE: | Gemeindebezirkskennzahl, Schema: 9BBZZ, BB=Nummer Bezirk, ZZ=00 |
| SUB_DISTRICT: | Zählbezirkskennzahl gemäß Stadt Wien (Schema: 9BBZZ, 9=Kennzeichnung Wien, BB=Nummer Bezirk, ZZ=Nummer Zählbezirk, ZZ=99 bei fehlender Zählbezirkskennzeichnung) |
| REF_DATE: | Referenzdatum |
| REF_YEAR: | Referenzjahr |
| INC_TOT_VALUE: | Durchschnittlicher Jahresnettobezug pro ArbeitnehmerIn (Gesamt) |
| INC_MAL_VALUE: | Durchschnittlicher Jahresnettobezug pro ArbeitnehmerIn (Männer) |
| INC_FEM_VALUE: | Durchschnittlicher Jahresnettobezug pro ArbeitnehmerIn (Frauen) |
## Rows: 408 Columns: 1
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (1): NUTS1;NUTS2;NUTS3;DISTRICT_CODE;SUB_DISTRICT_CODE;REF_DATE;REF_YEAR...
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 6 x 1
## `NUTS1;NUTS2;NUTS3;DISTRICT_CODE;SUB_DISTRICT_CODE;REF_DATE;REF_YEAR;INC_TOT_~
## <chr>
## 1 AT1;AT13;AT130;90000;90000;20020101;2002;18.217;NA;NA
## 2 AT1;AT13;AT130;90100;90100;20020101;2002;25.463;NA;NA
## 3 AT1;AT13;AT130;90200;90200;20020101;2002;16.439;NA;NA
## 4 AT1;AT13;AT130;90300;90300;20020101;2002;18.701;NA;NA
## 5 AT1;AT13;AT130;90400;90400;20020101;2002;20.325;NA;NA
## 6 AT1;AT13;AT130;90500;90500;20020101;2002;16.258;NA;NA
| Beschreibung | Erläuterung |
|---|---|
| Link: | https://www.data.gv.at/katalog/dataset/b29308e9-3888-44be-ac2f-8f1515ac0347 |
| Format | CSV |
| Bezeichnung: | edu-bez-aka-viz |
| DISTRICT_CODE: | Gemeindebezirkskennzahl, Schema: 9BBZZ, BB=Nummer Bezirk, ZZ=00 |
| SUB_DISTRICT: | Zählbezirkskennzahl gemäß Stadt Wien (Schema: 9BBZZ, 9=Kennzeichnung Wien, BB=Nummer Bezirk, ZZ=Nummer Zählbezirk, ZZ=99 bei fehlender Zählbezirkskennzeichnung) |
| REF_DATE: | Referenzdatum |
| REF_YEAR: | Referenzjahr |
| EDU_ALL | Bevölkerung im Alter 25-64 Jahre mit höchster abgeschlossener Schulbildung - Allgemeinbildende Pflichtschule |
| EDU_LEH: | Bevölkerim Alter 25-64 Jahre mit höchster abgeschlossener Schulbildung – Lehre |
| EDU_BMS: | Bevölkerung im Alter 25-64 Jahre mit höchster abgeschlossener Schulbildung - Berufsbildende mittlere Schule |
| EDU_AHS: | Bevölkerung im Alter 25-64 Jahre mit höchster abgeschlossener Schulbildung - Allgemeinbildende höhere Schule |
| EDU_BHS: | Bevölkerung im Alter 25-64 Jahre mit höchster abgeschlossener Schulbildung - Berufsbildende höhere Schule |
| EDU_KOL: | Bevölkerung im Alter 25-64 Jahre mit höchster abgeschlossener Schulbildung – Kolleg |
| EDU_UNI: | Bevölkerung im Alter 25-64 Jahre mit höchster abgeschlossener Schulbildung - Hochschule (Universität und Fachhochschule) |
| EDU_AKA: | Bevölkerung im Alter 25-64 Jahre mit höchster abgeschlossener Schulbildung - AkademikerInnenanteil (Hochschule und Hochschulverwandte Lehranstalten bzw. Akademien) |
## Warning: One or more parsing issues, see `problems()` for details
## Rows: 264 Columns: 1
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (1): NUTS1;NUTS2;NUTS3;DISTRICT_CODE;SUB_DISTRICT_CODE;REF_DATE;REF_YEAR...
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 6 x 1
## `NUTS1;NUTS2;NUTS3;DISTRICT_CODE;SUB_DISTRICT_CODE;REF_DATE;REF_YEAR;EDU_ALL;~
## <chr>
## 1 AT1;AT13;AT130;90000;90000;20081031;2008;22,05;26,58;11,84;9,96;8,3;1,02;2,42~
## 2 AT1;AT13;AT130;90000;90000;20091031;2009;22,71;25,76;11,53;9,85;8,11;1,04;2,4~
## 3 AT1;AT13;AT130;90000;90000;20101031;2010;23,04;25,18;11,28;10;8,12;1,02;2,34;~
## 4 AT1;AT13;AT130;90000;90000;20111031;2011;23,17;24,67;11,12;9,9;8,1;0,98;2,35;~
## 5 AT1;AT13;AT130;90000;90000;20121031;2012;23,26;24,01;10,89;9,79;8,13;0,99;2,3~
## 6 AT1;AT13;AT130;90000;90000;20131031;2013;23,77;23,22;10,58;9,73;7,95;0,99;2,2~
| Beschreibung | Erläuterung |
|---|---|
| Link: | https://www.wahldatenbank.at/ |
| Format: | CSV |
| Bezeichnung: | nrw2019 |
| GKZ: | Fiktive Gemeindekennziffer, da nicht jede Gemeinde eine eigene Kennziffer hat. |
| Logik: | G + Bundeslandziffer + drei Ziffern für den Bezirk |
z.B. Wien 1. Innere Stadt: G90100 Name: | Name des Bezirks Wahlberechtigte: | Anzahl der wahlberechtigten Personen Abgegebenen Anzahl abgegebenen Stimmen Gültig: | Anzahl der gültig abgegebenen Stimmen Ungültig: | Anzahl der ungültig abgegebenen Stimmen Parteienkürzel: | Parteienkürzel in Spaltennamen geben jeweils an wie viele gültige Stimmen die jeweilige Partei gewählt haben. Oevp: ÖVP, spoe: SPÖ, fpoe: FPÖ, gruene: Grünen, neos: NEOS, pilz: Liste Pilz, kpoe: KPÖ, wandl, bpoe, gilt bzoe, slp, cpoe: Restparteien
## Warning: One or more parsing issues, see `problems()` for details
## Rows: 116 Columns: 19
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (8): GKZ, Name, Wahlberechtigte, bpoe, gilt, bzoe, slp, cpoe
## dbl (11): abgegeben, gültig, ungültig, oevp, spoe, fpoe, gruene, neos, pilz,...
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 6 x 19
## GKZ Name Wahlberechtigte abgegeben gültig ungültig oevp spoe fpoe gruene
## <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 G101~ Eise~ 10798 8574 8485 89 3523 1685 1162 1220
## 2 G102~ Rust~ 1594 1276 1255 21 424 389 239 106
## 3 G103~ Eise~ 34307 28264 27816 448 10317 8572 4327 2478
## 4 G104~ Güss~ 21151 17336 17109 227 7357 4935 2828 1087
## 5 G105~ Jenn~ 14311 11323 11157 166 4526 2669 2366 890
## 6 G106~ Matt~ 31587 25758 25358 400 9000 8008 4230 2222
## # ... with 9 more variables: neos <dbl>, pilz <dbl>, kpoe <dbl>, wandl <dbl>,
## # bpoe <chr>, gilt <chr>, bzoe <chr>, slp <chr>, cpoe <chr>
| Beschreibung | Erläuterung |
|---|---|
| Link: | https://www.wien.gv.at/statistik/bevoelkerung/tabellen/bevoelkerung-alter-geschl-bez.html |
| Format: | html; selbstständig in Excel umgewandelt |
| Bezeichnung: | Bevölkerung nach Altersgruppen, Geschlecht und Gemeindebezirken 2020. Definition von Bevölkerung Personen, die in Wien mit Hauptwohnsitz gemeldet sind (inklusive Obdachlosenmeldungen) und um den Stichtag herum eine ununterbrochene Mindestaufenthaltsdauer von 90 Tagen in Wien aufweisen. |
| Bezirk: | Name des Bezirks |
| Männer: | Jeweils 4 Spalten: 0-18, 19-39, 40-64, 65+ in denen die Gesamtzahl an Männern je Bezirk dargestellt wird, die sich innerhalb der jeweiligen Altersgruppe befinden |
| Frauen: | Jeweils 4 Spalten: 0-18, 19-39, 40-64, 65+ in denen die Gesamtzahl an Frauen je Bezirk dargestellt wird, die sich innerhalb der jeweiligen Altersgruppe befinden |
## New names:
## * `` -> ...3
## * `` -> ...4
## * `` -> ...5
## * `` -> ...6
## * `` -> ...7
## * ...
## # A tibble: 6 x 10
## Bezirk `Altersgruppen zum~ ...3 ...4 ...5 ...6 ...7 ...8 ...9 ...10
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 <NA> Männer <NA> <NA> <NA> Frau~ <NA> <NA> <NA> <NA>
## 2 <NA> 0-18 m 19-39~ 40-6~ 65+ m 0-18~ 19-3~ 40-6~ 65+ w DISTR~
## 3 Wien 179756 309126 3121~ 1312~ 1686~ 3061~ 3198~ 1842~ <NA>
## 4 1. Inne~ 1039 1982 2918 1840 1030 2104 2828 2306 90100
## 5 2. Leop~ 9967 18770 16971 6543 9195 18501 16741 9160 90200
## 6 3. Land~ 7396 16038 14794 6206 7012 15871 15490 8873 90300
| Beschreibung | Erläuterung |
|---|---|
| Link: | https://www.wien.gv.at/statistik/bezirke/ |
| Format | Excel |
| Bezeichnung | pop-bez-age |
| DISTRICT_CODE: | Gemeindebezirkskennzahl, Schema: 9BBZZ, BB=Nummer Bezirk, ZZ=00 |
| SUB_DISTRICT: | Zählbezirkskennzahl gemäß Stadt Wien (Schema: 9BBZZ, 9=Kennzeichnung Wien, BB=Nummer Bezirk, ZZ=Nummer Zählbezirk, ZZ=99 bei fehlender Zählbezirkskennzeichnung) |
| REF_DATE: | Referenzdatum |
| REF_YEAR: | Referenzjahr |
| AGE_AVE: | Durchschnittliches Alter der Bevölkerung je Bezirk pro Jahr |
| Beschreibung | Erläuterung |
|---|---|
| Link: | https://www.data.gv.at/katalog/dataset/stadt-wien_ffentlichesverkehrsnetzhaltestellenpunktewien/resource/74b39fdd-50dc-4917-91ad-777cd6f15aec |
| Format | SHP im Ordner und als CSV |
| Bezeichnung | OEFFHALTESTOGD |
| SHAPE POINT | (Längengrad, Breitengrad) |
| HTXT | Bezeichnung der Haltestelle |
| HTXTK | Bezeichnung der Haltestelle – Kurztext |
| HLINIEN | Liste der an der Haltestelle haltenden Linien z.B. Reumannplatz: U1, Freiheitsplatz: 501, 510 Siebeckstraße: VAL3 |
| Beschreibung | Erläuterung |
|---|---|
| Link: | https://www.data.gv.at/katalog/dataset/stadt-wien_bezirksgrenzenwien/resource/f1540ea4-edd4-42f5-9b39-2cbba97fea36 |
| Format | SHP im Ordner |
| Bezeichnung | BEZIRKSGRENZEOGD |
| SHAPE | POLYGON |
| Name | Name des Bezirks |
| BEZNR | Bezirksnummer |
| NAMEK_NUM | Bezirksnummer und Name des Bezirks |
| DISTRICT_C | Postleizahl |
| FLAECHE | Fläche in m² |
| Geometry | Geographische Koordinaten zur Darstellung des Rasters der Wiener Bezirke |
| Beschreibung | Erläuterung |
|---|---|
| Link: | https://www.data.gv.at/katalog/dataset/covid-19-schutzimpfungen-impfungen-in-gemeinden/resource/89ad8077-0318-4dfb-953f-0824754b5adc |
| Format | CSV |
| Bezeichnung | impfungen-gemeinden |
| Gemeindecode | Postleizahl |
| Bevölkerung | Anzahl der Bevölkerung je Gemeinde |
| Teilgeimpfte | Anzahl der Personen mit einer Impfung |
| TeilgeimpftePro100 | Anzahl der Personen mit einer Impfung von 100 Personen |
| Vollimmunisierte | Anzahl der Personen die vollimmunisiert sind |
| VollimmunisiertePro100 | Anzahl der Personen die vollimmunisiert sind von 100 Personen |
## Rows: 2117 Columns: 1
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (1): Datum;Gemeindecode;Bevölkerung;Teilgeimpfte;TeilgeimpftePro100;Voll...
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 6 x 1
## `Datum;Gemeindecode;Bevölkerung;Teilgeimpfte;TeilgeimpftePro100;Vollimmunisie~
## <chr>
## 1 2021-11-19T23:59:59+01:00;10101;14895;11179;75.05203088;10629;71.35951662
## 2 2021-11-19T23:59:59+01:00;10201;2000;1533;76.65;1454;72.7
## 3 2021-11-19T23:59:59+01:00;10301;1883;1457;77.37652682;1410;74.88050982
## 4 2021-11-19T23:59:59+01:00;10302;1841;1436;78.00108637;1389;75.44812602
## 5 2021-11-19T23:59:59+01:00;10303;2122;1621;76.39019793;1555;73.2799246
## 6 2021-11-19T23:59:59+01:00;10304;3176;2386;75.12594458;2285;71.94584383
Im Zusammenhang mit den nachfolgenden Datensätzen, die die Adressen der jeweiligen Impfzentren und Ordinationen beinhalten, ist hervorzuheben, dass der ursprünglich herangezogene Datensatz mit der Bezeichnung “IMPFSTELLEOGD” von data.gv nicht die Covid-19-Impfzentren, sondern nur jene Impfstandorte in Wien darstellt, wo Personen generell Impfungen erhalten können.
Nach Feststellung des Fehlers und der Realisation, dass weder data.gv noch andere Datenanbieter die Lokalisationen der Impfzentren in Wien in standardardisierter Form zur Verfügung stellt, musste Notgedrungen die Datenerhebung selbstständig vorgenommen werden.
Wie nachfolgend näher beschrieben ist, wurden die Adressen der Impfzentren in Wien von der offiziellen Webseite der Stadt Wien erhoben und in einem Excel-Dokument erfasst.
| Beschreibung | Erläuterung |
|---|---|
| Link: | https://impfservice.wien/corona/ https://coronavirus.wien.gv.at/impfen-ohne-termin/ |
| Format | Excel |
| Bezeichnung | Impfzentren_Covid19_Wien |
| Anmerkung: | Da kein Datensatz mit aktuellen Impfzentren für Covid-19 verfügbar waren, wurden die Standorte samt Bezeichnung selbstständig gesammelt und in einem Excel-File erfasst. Mittels R-Packages tidygeocoder wurden die Koordinaten zu den jeweiligen Standorten automatisiert abgefragt und in den Spalten latitude und longitude dargestellt . |
| Impfstellen_Typ: | Selbstständig vergebene Kategorisierung der Impfstandorte nach Typen |
| Impfzentrum: | größere Impfstandorte wie z.B. Austria-Center-Vienna |
| Supermarkt: | Impfstandort bei einem Supermarkt |
| Sehenswürdigkeit: | Impfstandort bei einer Sehenswürdigkeit |
| Impfbox: | Impfstandort in einer sogenannten Impfbox. Also Impfung in einem Container mit nur limitierten Kapazitäten. |
| Einkaufszentrum: | Impfstandort in einem Einkaufszentrum |
| Name | Bezeichnung des Impfstandorts |
| Straße | Straße des Impfstandorts |
| Latitude | Breitengrad des Standorts |
| Longitute | Längengrad des Standorts |
## # A tibble: 6 x 10
## Nummer Impfstellen_Typ Name Strasse Zusatzinfo PLZ Bezirk location
## <dbl> <chr> <chr> <chr> <chr> <dbl> <chr> <chr>
## 1 1 Impfzentrum Karmeli~ Karmelit~ 1. Stock 1020 Leopol~ Karmelite~
## 2 2 Impfzentrum TownTown Thomas-K~ 2 1030 Landst~ Thomas-Kl~
## 3 3 Impfzentrum Gesundh~ Wienerbe~ <NA> 1100 Favori~ Wienerber~
## 4 4 Impfzentrum Am Schö~ Am Schöp~ 11/R10 1120 Meidli~ Am Schöpf~
## 5 5 Impfzentrum Gasgasse Gasgasse~ Eingang: S~ 1150 Rudolf~ Gasgasse ~
## 6 6 Impfzentrum Martins~ Martinst~ 1. Stock 1180 Währing Martinstr~
## # ... with 2 more variables: longitude <dbl>, latitude <dbl>
Auch beim nachfolgenden Datensatz musste ein alternativer Weg zur Datenerhebung angewandt werden. Mittels Internetrecherche wurde ein PDF-Dokument der Ärztekammer Wien entdeckt, dass zum Stand 25. November 2021 sämtliche Privatordinationen in Wien mit Name und Adresse auflistet. Durch Verwendung eines PDF zu Excel-Converters konnte der Datensatz in eine für R lesbare Struktur gebracht werden.
| Beschreibung | Erläuterung |
|---|---|
| Link: | https://www.aekwien.at/documents/263869/1017607/210805_Liste+der+offiziellen+Covid-19-Impfordinationen.pdf/fb17eb2b-5bae-9e76-178e-da27498d1309 |
Bezeichnung des Dokuments: Excel: impf_ordinationen_lat_long. xlsx PDF: | Liste der offiziellen Covid-19-Impfordinationen_WIEN Format | PDF – selbstständig in Excel umgewandelt FACH | Praxis mit Schwerpunkt auf …. Z.B. innere Medizin, Allgemeinmedizin oder HNO… Titel | Titel des behandelnden Doktors Name | Nachname des Doktors Vorname | Vorname des Doktors PLZ | Postleizahl Ordinationsadresse | Adresse der Ordination Tel.nr. | Telefonnummer der Ordination
## # A tibble: 6 x 14
## ï..Fach Titel Name Vorname PLZ Ordinationsadre~ Tel.nr. Details X
## <chr> <chr> <chr> <chr> <dbl> <chr> <chr> <chr> <lgl>
## 1 Allgemein~ Assoc.~ Bohdj~ Arthur 1010 Kärntner Strass~ 890-40~ <NA> NA
## 2 Innere Me~ Priv.D~ Kikic Zeljko 1010 Rathausstrasse ~ 470-61~ <NA> NA
## 3 Neurologi~ Dr. Litta~ Gabor 1010 Sonnenfelsgasse~ 0660/8~ <NA> NA
## 4 Plastisch~ Dr. Milani Shirin 1010 Schottengasse 7~ 236 13~ <NA> NA
## 5 Urologie Univ.P~ Shari~ Shahro~ 1010 Rathausstrasse ~ 470 61~ <NA> NA
## 6 Allgemein~ Dr. Brandl Rainer 1020 Grosse Pfarrgas~ 890 24~ <NA> NA
## # ... with 5 more variables: PLZ_Adresse <chr>, location <chr>, lat_long <lgl>,
## # lat <dbl>, longitude <dbl>
Function_Säulendiagramm <- function(Bevoelkerung_df, method_df) {
#Verteilung zuerst festlegen
Verteilung_df = c()
for (x in colnames(Bevoelkerung_df)) {
Verteilung_df <- append(Verteilung_df, Bevoelkerung_df[[x]])
}
#Die Gruppen zu den Verteilungen ermitteln
Gruppe_df = c()
for (x in colnames(Bevoelkerung_df)) {
Gruppe_df <- append(Gruppe_df, rep(x, nrow(Bevoelkerung_df)))
}
#Dataframe ummodellieren um Plotten mit GGPLOT zu ermöglichen, da bereits aggreggierte Daten
Bevoelkerung_Verteilung_ggp <- data.frame(Bezirk = rownames(Bevoelkerung_df),
Verteilung = Verteilung_df,
Gruppe = Gruppe_df)
#Levels herausholen zur erfolgreichen Sortierung
levelsBezirk <- c(rownames(Bevoelkerung_df))
levelsGruppe <- c(colnames(Bevoelkerung_df))
#Factorlevel zuweisen, um richtige Sortierung zu garantieren
Bevoelkerung_Verteilung_ggp$Bezirk <- fct_rev(factor(Bevoelkerung_Verteilung_ggp$Bezirk, levels = levelsBezirk))
Bevoelkerung_Verteilung_ggp$Gruppe <- fct_rev(factor(Bevoelkerung_Verteilung_ggp$Gruppe, levels = levelsGruppe))
#Plot zeichnen
plot_df <- ggplot(Bevoelkerung_Verteilung_ggp, aes(x = Bezirk, y = Verteilung, group = Gruppe, fill = Gruppe))
plot_df <- plot_df + geom_bar(position = method_df, stat = "identity") + coord_flip()
plot_df
}
Das durchschnittliche Bevölkerungsaufkommen pro Bezirk beträgt 83.520 Einwohner. Der Großteil der Bezirke schwankt zwischen dem ersten Quantil von 46.570 Einwohnern und dem dritten Quantil von 103.751 Einwohnern.
Bevoelkerung_Anzahl <- readRDS(file = "Bevoelkerung.rds")
summary(Bevoelkerung_Anzahl)
## Bevölkerung
## Min. : 15867
## 1st Qu.: 46570
## Median : 76137
## Mean : 83520
## 3rd Qu.:103751
## Max. :210573
boxplot(Bevoelkerung_Anzahl)
Das Minimum von 15.867 Einwohner liegt im 1. Bezirk, und das Maximum von 210.573 Einwohner im 10. Bezirk.
Function_Säulendiagramm(Bevoelkerung_Anzahl, "dodge")
Das Durchschnittsalter beträgt 41,49 Jahre und liegt sehr nahe am Median (41,01). Das erste (40,29) und das dritte Quantil (41,94) befinden sich im Nahen Umfeld des Medians und somit lässt sich vermuten, dass es keinen signifikanten Unterschied zwischen den einzelnen Bezirken im Bezug auf das Alter gibt.
Durchschnittsalter <- readRDS(file = "Durchschnittsalter.rds")
summary(Durchschnittsalter)
## Durchschnitt_Alter
## Min. :39.29
## 1st Qu.:40.29
## Median :41.01
## Mean :41.49
## 3rd Qu.:41.94
## Max. :47.45
boxplot(Durchschnittsalter)
Lediglich zwei kleine Ausreißer mit erhöhtem Alter gibt es im 1. Bezirk (47,45) und im 13. Bezirk. Das Minimum liegt 11. Bezirk bei 39,29 Jahren.
Function_Säulendiagramm(Durchschnittsalter, "dodge")
Die Daten repräsentieren einen prozentuellen Anteil an der Grundgesamtheit. Die Altersgruppen 19-39m, 40-64w, 19-39w, 40-64w am häufigsten vertreten. Dies lässt sich voraussichtlich darauf zurückführen, dass diese Altersgruppen das berufsfähiges Alter repräsentieren und viele Unternehmen in Wien angesiedelt sind. 0-18m sind minimal öfter vertreten als 0-18w und 65+w sind häufiger vertreten als 65+m.
Bevoelkerung_Alter_Geschlecht <- readRDS(file = "Bevoelkerung_Alter_Geschlecht.rds")
summary(Bevoelkerung_Alter_Geschlecht)
## 0-18 m 19-39 m 40-64 m 65+ m
## Min. : 6.436 Min. :12.35 Min. :14.53 Min. : 5.785
## 1st Qu.: 7.496 1st Qu.:14.50 1st Qu.:16.00 1st Qu.: 6.316
## Median : 9.012 Median :17.07 Median :16.45 Median : 6.593
## Mean : 8.680 Mean :16.62 Mean :16.31 Mean : 7.063
## 3rd Qu.: 9.446 3rd Qu.:18.42 3rd Qu.:16.67 3rd Qu.: 7.125
## Max. :11.012 Max. :20.67 Max. :18.18 Max. :11.466
## 0-18 w 19-39 w 40-64 w 65+ w
## Min. : 5.946 Min. :12.80 Min. :15.44 Min. : 7.747
## 1st Qu.: 7.230 1st Qu.:14.68 1st Qu.:15.85 1st Qu.: 8.829
## Median : 8.364 Median :16.79 Median :16.52 Median : 9.353
## Mean : 8.179 Mean :16.62 Mean :16.62 Mean : 9.910
## 3rd Qu.: 8.813 3rd Qu.:17.93 3rd Qu.:17.21 3rd Qu.:10.308
## Max. :10.354 Max. :21.25 Max. :18.16 Max. :14.370
Wie bereits vorher ist der Altersdurchschnitt im Bezirk Simmering niedriger als in anderen Bezirken und im ersten Bezirk ein relativ hoher Altersschnitt zu finden.
Function_Säulendiagramm(Bevoelkerung_Alter_Geschlecht, "fill")
Die Daten repräsentieren einen prozentuellen Anteil an der Grundgesamtheit. Hier lässt sich erkennen, dass die Frauenquote (51.32%) der Männerquote (48.68%) im Schnitt überwiegt.
Bevoelkerung_Geschlecht <- readRDS(file = "Bevoelkerung_Geschlecht.rds")
summary(Bevoelkerung_Geschlecht)
## m w
## Min. :46.71 Min. :49.38
## 1st Qu.:48.21 1st Qu.:50.65
## Median :48.56 Median :51.44
## Mean :48.68 Mean :51.32
## 3rd Qu.:49.35 3rd Qu.:51.79
## Max. :50.62 Max. :53.29
Eine besonders erhöhte Frauenquote ist in den Bezirken 18. Währing, 19. Döbling, und 13. Hietzing vorzufinden.
Function_Säulendiagramm(Bevoelkerung_Geschlecht, "fill")
Die Daten repräsentieren einen prozentuellen Anteil an der Grundgesamtheit. Die Altersgruppen 19-64 sind am häufigsten vertreten, wobei 0-18 und 65+ im Durchschnitt gleich viel vertreten sind.
Bevoelkerung_Alter <- readRDS(file = "Bevoelkerung_Alter.rds")
summary(Bevoelkerung_Alter)
## 0-18 19-39 40-64 65+
## Min. :12.38 Min. :25.35 Min. :29.97 Min. :13.53
## 1st Qu.:14.73 1st Qu.:29.03 1st Qu.:32.35 1st Qu.:15.22
## Median :17.43 Median :33.63 Median :32.78 Median :15.81
## Mean :16.86 Mean :33.24 Mean :32.93 Mean :16.97
## 3rd Qu.:18.25 3rd Qu.:36.37 3rd Qu.:33.35 3rd Qu.:17.42
## Max. :21.37 Max. :41.32 Max. :35.81 Max. :25.84
Würde man die Gruppe <39 als die jüngere Gruppe definieren, würde man ein erhöhtes Aufkommen davon in den Bezirken 2. Leopoldstadt, 5. Margareten und 9. Alsergrund vorfinden.
Function_Säulendiagramm(Bevoelkerung_Alter, "fill")
Die Daten repräsentieren einen prozentuellen Anteil an der Grundgesamtheit. Durchschnittlich höchster Bildungsabschluss stellt die Universität mit einer Quote von 30.99% dar. Die Pflichtschule (18,95%) und die Lehre (18,96%) sind am zweithäufigsten vertreten.
Bevoelkerung_Abschluss <- readRDS(file = "Education.rds")
summary(Bevoelkerung_Abschluss)
## Pflichtschule Lehre BMS AHS
## Min. : 8.65 Min. : 9.51 Min. : 6.070 Min. : 8.68
## 1st Qu.:12.80 1st Qu.:13.17 1st Qu.: 7.065 1st Qu.:10.52
## Median :18.35 Median :18.62 Median : 8.260 Median :11.70
## Mean :18.95 Mean :18.96 Mean : 8.646 Mean :12.13
## 3rd Qu.:25.08 3rd Qu.:23.01 3rd Qu.: 9.535 3rd Qu.:13.96
## Max. :32.75 Max. :30.68 Max. :12.830 Max. :15.70
## BHS Kolleg Akademie Universität
## Min. :6.280 Min. :0.710 Min. :1.220 Min. :12.10
## 1st Qu.:6.875 1st Qu.:0.915 1st Qu.:1.660 1st Qu.:20.38
## Median :7.190 Median :1.130 Median :1.910 Median :31.18
## Mean :7.386 Mean :1.050 Mean :1.873 Mean :30.99
## 3rd Qu.:7.635 3rd Qu.:1.180 3rd Qu.:2.080 3rd Qu.:42.53
## Max. :9.770 Max. :1.330 Max. :2.570 Max. :48.52
Universität, Akademie und Kolleg gruppiert als hoher Bildungsgrad würde ein erhöhtes Vorkommen in den Bezirken 1. Innere Stadt, 7. Neubau, 8. Josefstadt, 9. Alsergrund, 13. Hietzing, 18. Währing und 19. Döbling vorweisen.
Würden Lehre und Pflichtschule gemeinsam einen eher geringer Bildungsstand darstellen, wäre ein erhöhter Anteil in den Bezirken 10. Favoriten, 11. Simmering, 12. Meidling, 20. Brigittenau und 21. Floridsdorf vorzufinden.
Function_Säulendiagramm(Bevoelkerung_Abschluss, "fill")
Die Daten repräsentieren einen prozentuellen Anteil an der Grundgesamtheit. Die Mehrheit hat im Schnitt bei der letzten Nationalratswahl 2019 die ÖVP und SPÖ (ca. 25% jeweils) gewählt, gefolgt von den Grünen (ca. 23%) und danach FPÖ und Neos (ca. 11% jeweils).
Bevoelkerung_Politik <- readRDS(file = "Politik.rds")
summary(Bevoelkerung_Politik)
## ÖVP SPÖ FPÖ GRÜNE
## Min. :17.88 Min. :16.59 Min. : 5.738 Min. :10.99
## 1st Qu.:20.93 1st Qu.:20.01 1st Qu.: 7.448 1st Qu.:18.21
## Median :23.36 Median :24.78 Median : 9.638 Median :24.53
## Mean :24.15 Mean :25.02 Mean :10.885 Mean :23.48
## 3rd Qu.:26.04 3rd Qu.:29.02 3rd Qu.:13.160 3rd Qu.:29.48
## Max. :36.53 Max. :36.44 Max. :20.507 Max. :37.37
## NEOS Pilz KPÖ Wandl
## Min. : 5.870 Min. :2.428 Min. :0.4017 Min. :0.2901
## 1st Qu.: 8.025 1st Qu.:2.827 1st Qu.:0.6383 1st Qu.:0.4809
## Median :10.421 Median :2.989 Median :0.8032 Median :0.5259
## Mean :10.837 Mean :3.085 Mean :0.8077 Mean :0.5329
## 3rd Qu.:13.835 3rd Qu.:3.332 3rd Qu.:0.9799 3rd Qu.:0.6069
## Max. :16.657 Max. :4.279 Max. :1.1665 Max. :0.7587
## BPÖ
## Min. :0.2350
## 1st Qu.:0.3678
## Median :0.5088
## Mean :0.5129
## 3rd Qu.:0.6063
## Max. :0.9223
Besondere Auffälligkeiten sind in folgenden Bezirken zu finden:
Function_Säulendiagramm(Bevoelkerung_Politik, "fill")
Das durchschnittliches Jahreseinkommen liegt im Mittel bei ca. €24k, bei Männern bei ca. €27k und bei Frauen bei ca. €21k. Bei Männern ist eine höhere Reichweite (max - min) vorzufinden als bei Frauen, wobei es einen großen Außreiser beim Gehalt der Männer im ersten Bezirk gibt (ca. €40k).
Bevoelkerung_Einkommen <- readRDS(file = "Einkommen.rds")
summary(Bevoelkerung_Einkommen)
## Einkommen_Total Einkommen_Männer Einkommen_Frauen
## Min. :18528 Min. :19391 Min. :17471
## 1st Qu.:21387 1st Qu.:23099 1st Qu.:19441
## Median :23971 Median :26577 Median :21325
## Mean :23916 Mean :26679 Mean :21040
## 3rd Qu.:25601 3rd Qu.:29028 3rd Qu.:22285
## Max. :33256 Max. :39889 Max. :26266
Ein hohes Gehalt ist tendenziell in folgenden Bezirken vorzufinden:
Ein niedriges Gehalt ist tendenziell in folgenden Bezirken vorzufinden:
Function_Säulendiagramm(Bevoelkerung_Einkommen, "dodge")
Die Daten repräsentieren einen prozentuellen Anteil an der Grundgesamtheit. Durchschnittlich hat jeder Bezirk 4% Anteil an den Impfstellen, wobei es Bezirke gibt mit sehr wenig Impfstellen und Bezirke in denen ein Großteil der Impfstellen angesiedelt sind.
Anmerkung: Es werden die Haltestellen aufsummiert, die ein Impfzentrum bzw. eine Ordination im Umkreis von 500m zur Station vorweist. Also in Wirklichkeit repräsentieren die Zahlen die prozentuelle Anzahl an Haltestellen an der Grundgesamtheit, die eine Impfstelle im Umkreis von 500m vorweist. Dies soll eine gerechtere Abgrenzung zwischen den Bezirken ermöglichen. Das bedeutet auch, dass eine Doppelt- oder Mehrfachzählung einer Impfstelle möglich ist.
Impfstellen_pro_Bezirk <- readRDS(file = "Impfstellen.rds")
summary(Impfstellen_pro_Bezirk)
## Impfzentren_pro_Bez_Proz Ordination_pro_Bez_Proz
## Min. : 0.000 Min. : 1.708
## 1st Qu.: 1.557 1st Qu.: 3.277
## Median : 2.787 Median : 3.856
## Mean : 4.348 Mean : 4.348
## 3rd Qu.: 6.148 3rd Qu.: 4.985
## Max. :17.377 Max. :11.815
Bevoelkerung_df <- as.matrix(t(Impfstellen_pro_Bezirk))
Folgende Bezirke weisen eine hohe Anzahl an Impfzentren aus: - 23. Liesing - 14% - 9. Alsergrund - 17% - 21. Floridsdorf - 12%
#Plot zeichnen
plot_df <- ggplot(Bevoelkerung_Verteilung_ggp_Impfzentren, aes(x = "", y = Verteilung, group = Gruppe, fill = Bezirk))
plot_df <- plot_df + geom_bar(stat = "identity", color = "black") + coord_polar("y", start=0) + theme_void() + geom_text(aes(y = Verteilung, label = Verteilung, x = 1.4), position = position_stack(vjust = 0.5), size = 3.5, show.legend = FALSE)
plot_df
Folgende Bezirke weisen eine hohe Anzahl an Ordinationen aus:
#Plot zeichnen
plot_df <- ggplot(Bevoelkerung_Verteilung_ggp_Ordination, aes(x = "", y = Verteilung, group = Gruppe, fill = Bezirk))
plot_df <- plot_df + geom_bar(stat = "identity", color = "black") + coord_polar("y", start=0) + theme_void() + geom_text(aes(y = Verteilung, label = Verteilung, x = 1.4), position = position_stack(vjust = 0.5), size = 3.5, show.legend = FALSE)
plot_df
69% haben im Durchschnitt die erste Imfpung erhalten, wobei der maximale Wert bei 74% liegt und der minimale bei 64%.
65% sind im Durchschnitt vollimmunisiert, wobei der maximale Wert bei 70% liegt und der minimale bei 57%
Bevoelkerung_Impfung <- readRDS(file = "Impfungen.rds")
summary(Bevoelkerung_Impfung)
## TeilgeimpftePro100 VollimmunisiertePro100
## Min. :63.54 Min. :57.18
## 1st Qu.:66.70 1st Qu.:61.30
## Median :70.62 Median :66.18
## Mean :69.43 Mean :64.64
## 3rd Qu.:71.87 3rd Qu.:68.19
## Max. :73.96 Max. :70.07
Folgende Bezirke weisen eine hohe Impfquote auf:
Folgende Bezirke weisen eine niedrige Impfquote auf:
Function_Säulendiagramm(Bevoelkerung_Impfung, "dodge")
Um die Fragestellung zu bearbeiten, mussten im ersten Schritt die vorliegenden Datensätze für die Anforderungen adaptiert werden. Sowohl Impfzentren_Covid19_Wien als auch impf_ordinationen_lat_long enthielten in ihrer ursprünglichen Form ausschließlich die Standortadressen, die jedoch alleine nicht ausreichend sind, um diese als geographische Punkte auf einer Karte darzustellen.
Wie im nachfolgenden Codebeispiel verdeutlicht wird, wurde für den Datensatz impfzentren zunächst eine neue Spalte erzeugt, die die Adresse in einer für die Library tidygeocoder lesbare Form bringt. Dieses Package fordert, dass die Adresse folgendermaßen aussieht: Adresse, Hausnummer, Stadt, Bundesland
Dies wurde durch die paste0-Funktion erzeugt. Die Variable wurde anschließend in eine Vektor-Variable und dann in eine tibble-Variable umgewandelt.
Die nun entscheidende Tätigkeit erfolgt durch die Funktion geocode. Diese dient dazu in die Variable census_impfort den jeweiligen Längen- und Breitengrad der Adresse einzufügen. Als Methode wurde “opencage” gewählt, hierbei handelt es sich um einen Geocoding-API-Anbieter, wo wir einen Trial-Account eröffnet haben und somit in der Lage waren bis zu 2.500 Adressen pro Tag abzufragen. Dieser Geocoding-API-Anbieter wurde deswegen gewählt, da er im Vergleich zu anderen Anbietern die exaktesten Koordinaten (zum einem Preis von 0,00 €) lieferte. Wesentlich hierzu ist die Anwendung der Funktion Sys.setenv, die dazu diente den API-Key an opencage mitzuteilen, damit die Abfrage überhaupt durchgeführt werden kann.
Schlussendlich wurden die erhaltenen Längen- und Breitengrade in entsprechende neue Spalten in den Datensatz eingefügt.
# Benötigte Libraries:
library(tibble)
library(dplyr)
library(tidygeocoder)
# Variable "location" mit angepasster Adresse
# für Package library(tidygeocoder) nur lesbar, wenn folgende Angaben enthalten sind:
# Adresse Hausnummer, Stadt, Bundesland --> daher
# Karlsplatz 1, Wien, Wien
impfzentren_v2<-impfzentren %>%
mutate(location = paste0(Strasse, ", ", "Wien", ", " , "Wien"))
# locations in einen Vektor umwandeln
bvector <- as.vector(impfzentren_v2$location)
address_s <- tibble(singlelineaddress = bvector)
Sys.setenv(OPENCAGE_KEY="61635a87c8f747f6b18b302966a37678")
Sys.getenv("OPENCAGE_KEY")
# address_single
census_impfort <- address_s %>%
geocode(address = singlelineaddress, method = "opencage", verbose = TRUE)
census_impfort$lat
# import der ermittelten Längen, Breitengrade in den Datensatz
impfzentren_v2$longitude<-census_impfort$long
impfzentren_v2$latitude<-census_impfort$lat
Das oben veranschaulichte Beispiel wurde im nahezu gleichen Verfahren auch für den Datensatz impf_ordinationen angewendet.
# Hinzufügen von Stadt und Bundesland in eine eigene Spalte = Variable, damit diese von Library gelesen werden kann
impf_ordinationen_v5<-impf_ordinationen_v5 %>%
mutate(location = paste0(PLZ_Adresse, ", ", "Wien", ", " , "Wien"))
# locations in einen Vektor umwandeln
avector <- as.vector(impf_ordinationen_v5$location)
address_single <- tibble(singlelineaddress = avector)
Sys.setenv(OPENCAGE_KEY="61635a87c8f747f6b18b302966a37678")
Sys.getenv("OPENCAGE_KEY")
# jetzt öffnet sich .Renviron file - dort folgendes eingeben:
# , OPENCAGE_KEY="61635a87c8f747f6b18b302966a37678"
# address_single
census_s1 <- address_single %>%
geocode(address = singlelineaddress, method = "opencage", verbose = TRUE)
# https://opencagedata.com/dashboard#geocoding
# also 2.500 Abfragen pro Tag machen - das sollte reichen
# Project: Project 61635A
# Key API: 61635a87c8f747f6b18b302966a37678
# verwendung der Doku von Crane
# https://cran.r-project.org/web/packages/tidygeocoder/tidygeocoder.pdf
# key in OPENCAGE_KEY speichern
# Alternativer Geocoding-API-Anbieter
Sys.setenv(OPENCAGE_KEY="61635a87c8f747f6b18b302966a37678")
Sys.getenv("OPENCAGE_KEY")
# jetzt öffnet sich .Renviron file - dort folgendes eingeben:
# , OPENCAGE_KEY="61635a87c8f747f6b18b302966a37678"
# address_single
census_opencage <- address_single %>%
geocode(address = singlelineaddress, method = "opencage", verbose = TRUE)
census_opencage
# Vergleich der Koordinatengenauigkeit zwischen opencage und mapquest
# beide zeigen leichte Abweichungen im Vergleich zu Google Maps
# opencage scheint allerdings ein wenig genauer zu sein
# Latitude Ergebnis Mapquest: 48.20735 48.20972
# Long Ergebnis Mapquest: 16.37188 16.37583
# Kärtner Straße 7 lt. Google: Kärtner Straße 9
# Sonnenfelsgasse 5 --> Sonnenfelsgasse 5
# Latitude Ergebnis opencage: 48.20744 48.20973
# Long Ergebnis opencage: 16.37186 16.37577
# Kärtner Straße 7 lt. Google: Kärtner Straße 7
# Sonnenfelsgasse 5 --> Sonnenfelsgasse 3
# api key= Ctu8YmtO5Uw55RlZXYKIGClfE8U5L1NG
# https://developer.mapquest.com/user/me/profile
Sys.setenv(MAPQUEST_API_KEY="Ctu8YmtO5Uw55RlZXYKIGClfE8U5L1NG")
Sys.getenv("MAPQUEST_API_KEY")
census_s1 <- address_single %>%
geocode(address = singlelineaddress, method = "mapquest", verbose = TRUE)
## # A tibble: 6 x 10
## Nummer Impfstellen_Typ Name Strasse Zusatzinfo PLZ Bezirk location
## <dbl> <chr> <chr> <chr> <chr> <dbl> <chr> <chr>
## 1 1 Impfzentrum Karmeli~ Karmelit~ 1. Stock 1020 Leopol~ Karmelite~
## 2 2 Impfzentrum TownTown Thomas-K~ 2 1030 Landst~ Thomas-Kl~
## 3 3 Impfzentrum Gesundh~ Wienerbe~ <NA> 1100 Favori~ Wienerber~
## 4 4 Impfzentrum Am Schö~ Am Schöp~ 11/R10 1120 Meidli~ Am Schöpf~
## 5 5 Impfzentrum Gasgasse Gasgasse~ Eingang: S~ 1150 Rudolf~ Gasgasse ~
## 6 6 Impfzentrum Martins~ Martinst~ 1. Stock 1180 Währing Martinstr~
## # ... with 2 more variables: longitude <dbl>, latitude <dbl>
## # A tibble: 6 x 14
## ï..Fach Titel Name Vorname PLZ Ordinationsadre~ Tel.nr. Details X
## <chr> <chr> <chr> <chr> <dbl> <chr> <chr> <chr> <lgl>
## 1 Allgemein~ Assoc.~ Bohdj~ Arthur 1010 Kärntner Strass~ 890-40~ <NA> NA
## 2 Innere Me~ Priv.D~ Kikic Zeljko 1010 Rathausstrasse ~ 470-61~ <NA> NA
## 3 Neurologi~ Dr. Litta~ Gabor 1010 Sonnenfelsgasse~ 0660/8~ <NA> NA
## 4 Plastisch~ Dr. Milani Shirin 1010 Schottengasse 7~ 236 13~ <NA> NA
## 5 Urologie Univ.P~ Shari~ Shahro~ 1010 Rathausstrasse ~ 470 61~ <NA> NA
## 6 Allgemein~ Dr. Brandl Rainer 1020 Grosse Pfarrgas~ 890 24~ <NA> NA
## # ... with 5 more variables: PLZ_Adresse <chr>, location <chr>, lat_long <lgl>,
## # lat <dbl>, longitude <dbl>
# Umwandeln in sf-Objekt der Longitude und Latitude des Datensatzes
impfzentren_umw<-impfzentren_v2 %>%
st_as_sf(coords=c("longitude", "latitude"), crs=4326)
# Umwandeln in sf-Objekt der Longitude und Latitude des Datensatzes
impf_ordination_umw<-impf_ordination %>%
st_as_sf(coords=c("longitude", "lat"), crs=4326)
head(impf_ordination_umw)
## Simple feature collection with 6 features and 12 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: 16.35708 ymin: 48.20744 xmax: 16.38011 ymax: 48.21876
## Geodetic CRS: WGS 84
## # A tibble: 6 x 13
## ï..Fach Titel Name Vorname PLZ Ordinationsadre~ Tel.nr. Details X
## <chr> <chr> <chr> <chr> <dbl> <chr> <chr> <chr> <lgl>
## 1 Allgemein~ Assoc.~ Bohdj~ Arthur 1010 Kärntner Strass~ 890-40~ <NA> NA
## 2 Innere Me~ Priv.D~ Kikic Zeljko 1010 Rathausstrasse ~ 470-61~ <NA> NA
## 3 Neurologi~ Dr. Litta~ Gabor 1010 Sonnenfelsgasse~ 0660/8~ <NA> NA
## 4 Plastisch~ Dr. Milani Shirin 1010 Schottengasse 7~ 236 13~ <NA> NA
## 5 Urologie Univ.P~ Shari~ Shahro~ 1010 Rathausstrasse ~ 470 61~ <NA> NA
## 6 Allgemein~ Dr. Brandl Rainer 1020 Grosse Pfarrgas~ 890 24~ <NA> NA
## # ... with 4 more variables: PLZ_Adresse <chr>, location <chr>, lat_long <lgl>,
## # geometry <POINT [°]>
Da das primäre Ziel des Projekts darin liegt die Anzahl an Haltestellen in einem gewissen Umkreis zu den Impfstandorten zu ermitteln, mussten Puffer um die Impfstandorte gebildet werden und nur jene Haltestellen zu dem jeweiligen Impfstandort hinzugezählt werden, die innerhalb des Puffers liegen.
Als Puffer wurde ein Durchmesser von 500 Meter gewählt. Diese Distanz, die sich auf den Luftliniendurchmesser bezieht, wurde aufgrund der Erkenntnisse eines Forschungspapers gezogen (https://www.sthelens.gov.uk/media/331745/cd-2229-wyg_how-far-do-people-walk.pdf). Dieses geht davon aus, dass Personen prinzipiell einen Fußweg von 400 Meter als angemessen empfinden. Da ein Durchmesser von 500 Meter einem Radius von 250 Metern entspricht, der allerdings eine Luftlinie betrachtet, wurde davon ausgegangen, dass ein Wert von 250 Meter Radius dem in etwa entsprechen dürfte.
Zur Veranschaulichung der Impfstandorte und Haltestellen innerhalb der Gemeindebezirke, mussten die entsprechenden Datensätze transformiert werden. Durch die Funktion st_transform erfolgt eine Transformation der Längen- und Breitengrade in ein zweidimensionales flaches Koordinatensystem. Bei der Nummer 31287 handelt es sich um die projizierten Koordinaten für Österreich.
Durch die Funktion st_buffer wird um jedes Impfzentrum ein Puffer von 500 Metern eingefügt.
# st_tranformation
bezirksgrenzen<-sf::st_read(dsn="Data/BEZIRKSGRENZEOGDPolygon.shp")
## Reading layer `BEZIRKSGRENZEOGDPolygon' from data source
## `C:\FHWn\S3\Analysetechniken\Projekt\Data\BEZIRKSGRENZEOGDPolygon.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 23 features and 15 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 16.18183 ymin: 48.1179 xmax: 16.57751 ymax: 48.32267
## Geodetic CRS: WGS 84
bezirksgrenzen.mgi <- st_transform(bezirksgrenzen, 31287)
impfzentren_umw.mgi <- st_transform(impfzentren_umw, 31287)
impf.puffer <- impfzentren_umw.mgi %>% st_buffer(dist = 500)
Nach den erfolgten Transformationen sowie dem Hinzufügen des Puffers konnten die Daten innerhalb der Bezirksgrenzen geplottet werden.
## Reading layer `OEFFHALTESTOGDPoint' from data source
## `C:\FHWn\S3\Analysetechniken\Projekt\Data\OEFFHALTESTOGDPoint.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 4763 features and 6 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: 16.18826 ymin: 48.12287 xmax: 16.54427 ymax: 48.31134
## Geodetic CRS: WGS 84
Durch die Darstellung der mit Puffern versehenen Impfzentren innerhalb Wiens (dargestellt als blaue Punkte) im Vergleich zu den grün dargestellten Haltestellen, zeigt sich, dass dieser Ansatz Probleme mit sich bringt. Aufgrund der Größe der gewählten Puffer und das manche Impfzentren in unmittelbarer Nähe zu Bezirksgrenzen liegen, führte es zum Problem, dass durch eine solche Berechnung Haltestellen aus Nachbarbezirken zu den jeweiligen Standorten hinzugezählt werden würden. Ebenso offenbart es eine viel weitergehendere Problematik, nämlich die, dass wenn nun ein Impfzentrum in Bezirk A nahe zur Bezirksgrenze B liegt, jedoch eine höhere Dichte an Haltestellen im Bezirk B vorliegt, so würde dem Impfzentrum mit Standort im Bezirk A eine hohe Anzahl an Haltestellen zugerechnet werden, obwohl diese ausschließlich den Bezirk B betreffen. Durch die bessere Erreichbarkeit für Bewohner des Bezirks B würde gemäß unserer Annahme, dann das Impfzentrum primär Bezirksbewohner B ansprechen als Bewohner des Bezirks A. Somit würde es in diesem Fall mehr Sinn machen das Impfzentrum zum Standort B zuzuordnen bzw. eine Gewichtung vorzunehmen.
Zur Adressierung der Problematik wurde nach umfassender Überlegung entschlossen die Berechnung von der Anzahl an Haltestellen im Umkreis von 500 Metern zu Impfzentren zu der Anzahl an Impfzentren im Umkreis von 500 Metern der Haltestellen umzudrehen.
Somit wird nicht um jeden Impfstandort ein Puffer von 500 Meter gelegt, sondern um jede Haltestelle. Hierzu musste festgestellt werden in welchem Bezirk sich die in Summe 4763 Haltestellen jeweils befinden, um anschließend die Anzahl an Impfstandorte zu ermitteln, die im Umkreis von 500 Metern zu jeder der Haltestellen liegt.
Auch dieser Ansatz blieb leider nicht ohne der Notwendigkeit gewisse Annahmen sowie Verallgemeinerungen zu treffen. Diese können folgendermaßen zusammengefasst werden: - Keine der Haltestellen erhält eine Gewichtung. Dass heißt jede Haltestelle wird unabhängig von Größe oder Bedeutsamkeit gleich gewertet. Daher wird zum Beispiel der sehr zentral gelegene Hauptbahnhof Wien, der Haltestelle und Bahnhof für zahlreiche öffentliche Verkehrsmittel ist, nicht anders berücksichtigt, als eine x-beliebige Bushaltestelle.
Ähnlich wie bei Haltestellen, so werden auch Impfzentren als gleichwertig angenommen. Auch wenn durchaus davon auszugehen ist, dass das Austria Center im 22. Bezirk weit größere Menschenkapazitäten abfertigen kann als es im Stephansdom möglich ist. Andererseits ist erfahrungsgemäß die Frequentierung um den Stephansdom deutlich höher als an manch anderen Standorten, die hiermit ebenso unberücksichtigt bleibt.
Da sich neben den 24 Impfzentren auch 199 Privatordinationen in Wien befinden, wo Menschen eine Covid-19-Impfung erhalten, wurde zumindest hier eine klare Trennung der beiden Variablen entschieden. Statt von 223 Impfstandorten in ganz Wien auszugehen, wurde entschlossen die Anzahl an Impfzentren und die Anzahl an Privatordinationen bewusst in zwei Variablen aufzuteilen, da hier sehr wohl von einem Unterschied zwischen den jeweiligen Einrichtungen auszugehen ist. Eine Privatordination, die auch ihren regulären Betrieb bewältigen muss und nur “nebenbei” Personen impft kann bei weitem nicht dieselben Kapazitäten an Menschen impfen, wie es etwa das Austria Center in Wien tagtäglich bewältigt.
Die letzte Annahme berücksichtigt die oben bereits erläuterte Problematik beim ursprünglichen Ansatz, nämlich die Zuordnung der Impfzentren zu den jeweiligen Bezirken. Dadurch dass die Anzahl an Impfstandorten im Umkreis von 500 Metern zu jeder Haltestelle berechnet wird, bekommt jede Haltestelle einen gewissen Wert zugewiesen. Dieser Wert kann als “synthetisch” verstanden werden, da er nicht die reale Anzahl an Impfstandorten in Wien aufzeigt, aber dafür die Erreichbarkeit der Impfstandorte je Bezirk offenbart.
Zur Umsetzung unserer Ziele mussten folgende Schritte nacheinander abgearbeitet werden:
Um jede Haltestelle dem jeweiligen Bezirk zuordnen zu können, wurde aus der Spalte “geometry” des Haltestellen-Datensatzes der Längen- und Breitengrad herausgefiltert und anschließend in seperate Spalten wieder eingefügt.
long_haltestelle<-c()
lat_haltestelle<-c()
for (i in 1:nrow(haltestelle_spez)) {
g<-haltestelle_spez$geometry[[i]][1]
h<-haltestelle_spez$geometry[[i]][2]
long_haltestelle<-c(long_haltestelle, g)
lat_haltestelle<-c(lat_haltestelle, h)
}
# In ein DataFrame einfügen
haltestellen_long_lat<-data.frame(long_haltestelle, lat_haltestelle)
head(haltestellen_long_lat)
## long_haltestelle lat_haltestelle
## 1 16.37789 48.17502
## 2 16.36856 48.23522
## 3 16.35424 48.19203
## 4 16.36313 48.21514
## 5 16.30503 48.18755
## 6 16.31914 48.18599
Nachfolgend wurde durch die Funktion st_as_sf das DataFrame in ein sf-Objekt konvertiert. Hierzu wurde die Variable haltestellen_long_lat, die die Längen- und Breitengrade enthält angeführt. Im Vektor des Parameters coords mussten die Spaltennamen der Variable angeführt werden und zuletzt unter crs das Koordinatenreferenzsystem der Bezirksgrenzen eingefügt werden.
Im Anschluss wurde in die Variable pnts die Bezirksnamen eingefügt. Hierzu wurde durch die Funktion st_intersects festgestellt, welcher Haltestellen-(Punkt) in welchem Bezirk liegt und der entsprechende Name eingefügt.
library(sf)
# Convert DF-Objekt in ein sf-Objekt
# st_crs: gibt das Koord-Referenzsystem von sf-Objekt zurück
pnts_sf <- st_as_sf(haltestellen_long_lat, coords = c('long_haltestelle', 'lat_haltestelle'), crs = st_crs(bezirksgrenzen))
# dem Datensatz mit allen Haltestellen die jeweiligen Bezirksnamen hinzufügen
pnts <- pnts_sf %>% mutate(intersection = as.integer(st_intersects(geometry, bezirksgrenzen)), area = if_else(is.na(intersection), '', bezirksgrenzen$NAMEG[intersection]))
pnts
## Simple feature collection with 4763 features and 2 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: 16.18826 ymin: 48.12287 xmax: 16.54427 ymax: 48.31134
## Geodetic CRS: WGS 84
## First 10 features:
## geometry intersection area
## 1 POINT (16.37789 48.17502) 14 FAVORITEN
## 2 POINT (16.36856 48.23522) 9 BRIGITTENAU
## 3 POINT (16.35424 48.19203) 18 MARGARETEN
## 4 POINT (16.36313 48.21514) 5 ALSERGRUND
## 5 POINT (16.30503 48.18755) 20 HIETZING
## 6 POINT (16.31914 48.18599) 20 HIETZING
## 7 POINT (16.27621 48.19224) 20 HIETZING
## 8 POINT (16.37034 48.19392) 23 WIEDEN
## 9 POINT (16.39483 48.24641) 13 FLORIDSDORF
## 10 POINT (16.34428 48.22128) 5 ALSERGRUND
Ähnlich jenem Schritt der bereits in der ursprünglichen Überlegung zur Berechnung der Haltestellen innerhalb der Impfstandorte-Puffer benötigt wurde, benötigt es nun erneut eine Transformation der benötigten Datensätze auf das Referenzkoordinatensystem 31287, dass für Österreich steht. Durch die Funktion st_buffer wird nun allerdings den Haltestellen ein Puffer von jeweils 500 Metern zugewiesen.
bezirksgrenzen.mgi <- st_transform(bezirksgrenzen, 31287)
impfzentren_umw.mgi <- st_transform(impfzentren_umw, 31287)
haltestellen_long_lat.mgi<-st_transform(pnts, 31287)
# Puffer um die Haltestellen erzeugen
halte.puffer <- haltestellen_long_lat.mgi %>% st_buffer(dist = 500)
Nach der erfolgreichen Transformation können die aufbereiteten Daten zusammen geographisch dargestellt werden.
Jeder Haltestelle wurde ein teiltransparenter grüner Puffer zugewiesen. Die auf der Karte verteilten größeren blauen Punkte geben die insgesamt 24 Impfzentren, während die kleineren schwarzen Punkte die insgesamt 199 Privatordinationen innerhalb Wiens darstellen.
# darstellen Wiener-Bezirksgrenzen
a <- tm_shape(bezirksgrenzen.mgi)
a <- a + tm_borders()
# Puffer um die Impfzentren von 500m
# Puffer Teiltransparent dargestellt, damit die Bezirksgrenzen ersichtlich bleiben
a <- a + tm_shape(halte.puffer) + tm_polygons(col="green", alpha=0.1)
a <- a + tm_shape(haltestellen_long_lat.mgi) + tm_dots(col="green", size=0.001, alpha=0.1)
a <- a + tm_shape(impfzentren_umw) + tm_symbols(col="blue", size=1, alpha=0.5)
a <- a + tm_shape(impf_ordination_umw) + tm_dots(col="black", size=0.2)
# Darstellen von Titel
a<- a + tm_layout(legend.position = c("right", "top"), legend.show = FALSE,
title= 'Umkreis 500m zu Wiener-Haltestellen', title.size = 3,
title.position = c('right', 'top'), legend.outside.position = TRUE, legend.title.color="black" )
a
Der entscheidende Schritt zur Berechnung des gesuchten Prädiktors ergibt sich im wesentlichen durch eine einzige Funktion. Mittels st_distance wird der Abstand zwischen jeder Haltestelle zu dem jeweiligen Impfstandort ermittelt. Jeder dieser Abstände wird in der Unit-Einheit m, also Meter errechnet. Dadurch resultiert etwa für die Abstände zwischen den Haltestellen und den Impfzentren eine 4763x24 Matrix und für die Ordinationen eine 4763x199 Matrix. Die Abstände werden so dargestellt, dass jede Zeile eine Haltestelle und jede Spalte eine Ordination bzw. ein Impfzentrum repräsentiert.
# Abstände Impfzentren zu Haltestellen errechnet
distance_impfz2<-st_distance(haltestelle_spez, impfzentren_umw)
# Abstände Ordinationen zu Haltestellen
distance_ord<-st_distance(haltestelle_spez, impf_ordination_umw)
dim(distance_impfz2) # m Zeilen: 4763, n Spalten: 24 mit 114312 Elementen
dim(distance_ord) # m Zeilen: 4763, n Spalten: 199
Eine solche Matrix sieht nun bei den Ordinationen so aus:
## Rows: 4762 Columns: 1
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (1): 3.632783e+03 [m] 4.608212e+03 [m] 3.862762e+03 [m] 4.348730e+03 [m]...
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 6 x 1
## `3.632783e+03 [m] 4.608212e+03 [m] 3.862762e+03 [m] 4.348730e+03 [m] 4.608212~
## <chr>
## 1 3.097733e+03 [m] 2.500135e+03 [m] 2.883585e+03 [m] 2.515889e+03 [m] 2.500135e~
## 2 2.154665e+03 [m] 2.459914e+03 [m] 2.533715e+03 [m] 2.410390e+03 [m] 2.459914e~
## 3 1.072969e+03 [m] 4.638722e+02 [m] 1.113202e+03 [m] 2.517103e+02 [m] 4.638722e~
## 4 5.424977e+03 [m] 4.855747e+03 [m] 5.794272e+03 [m] 5.147109e+03 [m] 4.855747e~
## 5 4.577787e+03 [m] 4.201414e+03 [m] 4.957983e+03 [m] 4.424637e+03 [m] 4.201414e~
## 6 7.288262e+03 [m] 6.466346e+03 [m] 7.631044e+03 [m] 6.840511e+03 [m] 6.466346e~
Zwar wurden nun alle Abstände berechnet, allerdings sind die eigentlichen Distanzen nicht relevant, sondern nur die Frage, ob der jeweilige Impfstandort innerhalb des vorgebenen Umkreises liegt. Da die Abstände in Meter-Units angegeben waren, mussten die Elemente der Matrizen in numerische Werte umgewandelt werden. Dies wurde durch die Funktion as.numeric bewerkstelligt. Entscheidend sind schlussendlich zwei sehr einfache Zeilen Code. Durch nachfolgende Code-Zeilen: num_dist_copy[num_dist_copy <= 250] <- 1 num_dist_copy[num_dist_copy > 250] <- 0 wurde jeder Abstand, der kleiner gleich 250 Meter ist ein Wert 1 und jedem Wert darüber ein Wert 0 zugewiesen. Mittels rowSums wurde ausgehend vom letzten Schritt die Zeilensumme gebildet. In den Variablen rowSum_dist_impfzentrum und rowSum_dist_ord befanden sich nun die Anzahl an Impfzentren bzw. Privatordinationen für jede Haltestelle, die innerhalb des 500 Meter Umkreises liegen.
# Unit-Value in Numerische-Matrix umwandeln, damit damit weiter rechnen kann
# einmal für Impfzentren
numeric_distance_matrix <- matrix(as.numeric(distance_impfz2), ncol = 24)
# einmal für die Impf-Ordinationen
numeric_distance_matrix_ord <- matrix(
as.numeric(distance_ord), ncol = 199)
# Sicherheitskopien anfertigen
num_dist_copy<-numeric_distance_matrix
num_dist_ord_copy<-numeric_distance_matrix_ord
# konvertiere die Matrix indem
# Werte <=500 als 1 und Werte > 250 als 0 ausgewiesen werden
num_dist_copy[num_dist_copy <= 250] <- 1
num_dist_copy[num_dist_copy > 250] <- 0
num_dist_ord_copy[num_dist_ord_copy <= 250] <- 1
num_dist_ord_copy[num_dist_ord_copy > 250] <- 0
#Zeilenweise Summe Anzahl Impfzentren je Haltestelle im Umkreis von 500m
rowSum_dist_impfzentrum<-rowSums(num_dist_copy, dims=1)
rowSum_dist_ord<-rowSums(num_dist_ord_copy, dims=1)
# Ergebnis als Spalte in Datensatz einfügen
haltestelle_spez2$Anzahl_Impfzentren<-rowSum_dist_impfzentrum # Anzahl_Impfzentren
haltestelle_spez2$Anzahl_Ordinationen<-rowSum_dist_ord
Zuletzt mussten nun nur noch die ermittelten Werte je Haltestelle auf Bezirksebene gruppiert werden. In den Variablen Impfzentren_group_Bezirk und Ordinationen_group_Bezirk finden sich schlussendlich die gesuchten Prädiktoren.
# gruppieren des Datensatzes nach Bezirksname sowie nach Anzahl an Impfzentren
Impfzentren_group_Bezirk<-haltestelle_spez2 %>% group_by(Bezirksname_only) %>% summarise(Freq=sum(Anzahl_Impfzentren))
Ordinationen_group_Bezirk<-haltestelle_spez2 %>% group_by(Bezirksname_only) %>% summarise(Freq=sum(Anzahl_Ordinationen))
## Simple feature collection with 6 features and 2 fields
## Geometry type: MULTIPOINT
## Dimension: XY
## Bounding box: xmin: 16.18826 ymin: 48.12287 xmax: 16.54427 ymax: 48.29958
## Geodetic CRS: WGS 84
## # A tibble: 6 x 3
## Bezirksname_only Freq geometry
## <chr> <dbl> <MULTIPOINT [°]>
## 1 "" 0 ((16.47628 48.27528), (16.45157 48.28922), (16.44843 4~
## 2 "ALSERGRUND" 6 ((16.3563 48.23337), (16.35782 48.23559), (16.35803 48~
## 3 "BRIGITTENAU" 11 ((16.36534 48.23636), (16.36552 48.23746), (16.3651 48~
## 4 "D\xd6BLING" 0 ((16.36144 48.26985), (16.36788 48.26013), (16.36743 4~
## 5 "DONAUSTADT" 38 ((16.50216 48.17079), (16.52374 48.20804), (16.52296 4~
## 6 "FAVORITEN" 106 ((16.3593 48.18043), (16.35929 48.18043), (16.35939 48~
Nachdem die entsprechenden Vorarbeiten zur Prädiktorermittlung abgeschlossen sind, konnten die erhobenen Daten deskriptiv ausgewertet werden.
Mittels nachfolgender Darstellung kann zunächst durch die blauen Punkte die Gesamtzahl an Haltestellen in Wien dargestellt werden. All jene Punkte, die grün hinterlegt worden sind, sind jene Haltestellen die einen Impfstandort (ein Impfzentrum oder eine Privatordination) im Umkreis von 500 Meter haben.
Es zeigt sich, eine besonders starke Grünverteilung insbesondere in den alten Bezirken, die südlich der Donau liegen. Je weiter außerhalb der Bezirkenzentren, desto weniger Haltestellen und damit auch weniger Haltestellen in unmittelbarer Nähe zu den Impfstandorten sind festzustellen.
Zur besseren Nachvollziehbarkeit der Anzahl an Haltestellen und jener Haltestellen, die im Umkreis von 500 Meter zu einem Impfstandort liegen, wurde folgende zwei Barcharts dargestellt.
Wie nachfolgend zu sehen ist, wird hier die Anzahl an Haltestellen im Umkreis von 500 Meter zu einem Impfstandort je Bezirk dargestellt. Klarer Gewinner ist in diesem Fall Favoriten gefolgt von Donaustadt, Meidlung und der Inneren Stadt. An den letzten Stellen finden sich Josefstadt, Mariahilf und Hernals.
Vergleicht man nun die Werte mit der Gesamtzahl an Haltestellen, die je Bezirk vorliegen, so sind die Top 3 Bezirke: Donaustadt, Liesing und Favoriten. Mariahilf, Josefstadt und Neubau sind dieses Mal jene Bezirke mit den wenigsten Haltestellen insgesamt.
In diesem Barchart werden die Unterschiede zwischen den zuvor gezeigten Barcharts aufgezeigt. Erneut steht jeder einzelne Balken für einen Bezirk, wie er auf der X-Achse angeführt wird und die Y-Achse gibt die Anzahl an Haltestellen an. Nun zeigt sich, wie sich die zwei Parameter, nämlich die Gesamtzahl an Haltestellen zu jenen Haltestellen die ein Impfstandort in der Nähe haben, im Verhältnis verhalten.
Betrachtet man hierzu beispielweise den Bezirk Donaustadt, so zeigt sich, dass es eine große Diskrepanz zwischen der Gesamtzahl an Haltestellen im Vergleich zu den Haltestellen in der Nähe zu Impfstandorten gibt. So hat jener Bezirk etwa 750 Haltestellen, aber nicht einmal 200 die in unmittelbarer Nähe zu Impfstandorten liegen. Vergleicht man dies zu kleineren Bezirken mit weniger Haltestellen besitzen, so ist dieses Missverhältnis weit geringer oder teilweise bei fast Null.
Für die Erstellung der Karten haben wir folgenden Libraries verwendet:
sf (Simple Features): Spezifikation des “Open Geospatial Consortium” welche eine allgemein gültige Architektur für geogradische Daten und deren Geometrie definiert. Das Paket beinhaltet unterschiedliche Klassen wie Punkte, Linien, Polygone sowie verschiedene Multi-Klassen. Über die Klassen ermöglicht sf verschiedene räumliche Operatoren.
RColorBrewer: Enthält Paletten und Farben die wir für unsere Plots verwendet haben. Wir haben auch die R-ColorBrewer Website (https://colorbrewer2.org/) für Farben und Paletten benutzt.
tmap (Thematic Maps): R-Paket der Usern ermöglicht diverse Darstellungen der geographischen Daten.
raster: R-Paket der für Lesen, schreiben, Veränderung und Analisierung von verschiedenen geographischen Klassen und Daten ermöglicht.
Wien ist die Bundeshauptstadt der Republik Österreich und zugleich eines der neuen österreichichen Bundesländer. In Wien wohnen fast 2 Mio Einwohner. Die Gesamtfäche von Wien ist 414.8 km^2, die auf 23 Wiener Gemeindebezirken aufgeteilt werden kann.
#In unserem "Wien Datenatz" waren die Wiener Bezirke nicht gut "lesbar" da die Umlaute nicht richtig erkannt wurden und deswegen
#müssten wir eine Liste von Wiener Bezirken erstellen.
Dis_Label<-c("Innere Stadt","Leopoldstadt","Landstraße","Wieden","Margareten","Mariahilf", "Neubau", "Josefstadt","Alsergrund","Favoriten","Simmering","Meilding","Penzing","Rudolfsheim-Fünfhaus","Ottakring","Hernals","Währing","Döbling","Florisdorf","Donaustadt","Liesing")
#km2 wird für Legende Titel benutzt. Hier haben wir mit "Regex" die richtige Schriftweise ermöglicht.
km2 <- expression("Fläche (m"^2*")")
#tmap_mode ist eine Methode, die uns interaktive und "normale" Plots ermöglicht. Mögliche Auspregungen sind "view" für interaktive und "plot" für statische Grafiken.
tmap_mode("plot")
## tmap mode set to plotting
#Für Bezirksgrenzen und Wien "High-Level" Kennzahlen wie (Fläche, Bezirknummer...) haben wir wien_bez benutzt.
wien_bez <- readRDS(file = "wien_bez.rds")
#wien_bez ist class sf DataFrame mit 23 Features (1 Feature für 1 Wiener Bezirk) und 15 Felder.
wien_bez
## Simple feature collection with 23 features and 15 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 16.18183 ymin: 48.1179 xmax: 16.57751 ymax: 48.32267
## Geodetic CRS: WGS 84
## First 10 features:
## NAMEK BEZNR BEZ_RZ NAMEK_NUM NAMEK_RZ NAMEG
## 1 Landstra<df>e 3 III 3., Landstra<df>e III. Landstra<df>e LANDSTRASSE
## 2 Josefstadt 8 VIII 8., Josefstadt VIII. Josefstadt JOSEFSTADT
## 3 Innere Stadt 1 I 1., Innere Stadt I. Innere Stadt INNERE STADT
## 4 Ottakring 16 XVI 16., Ottakring XVI. Ottakring OTTAKRING
## 5 Alsergrund 9 IX 9., Alsergrund IX. Alsergrund ALSERGRUND
## 6 Leopoldstadt 2 II 2., Leopoldstadt II. Leopoldstadt LEOPOLDSTADT
## 7 W<e4>hring 18 XVIII 18., W<e4>hring XVIII. W<e4>hring W<c4>HRING
## 8 Hernals 17 XVII 17., Hernals XVII. Hernals HERNALS
## 9 Brigittenau 20 XX 20., Brigittenau XX. Brigittenau BRIGITTENAU
## 10 Penzing 14 XIV 14., Penzing XIV. Penzing PENZING
## LABEL BEZ DISTRICT_C STATAUSTRI STATAUSTR0 FLAECHE UMFANG AKT_TIMEST
## 1 III. 03 1030 903 90301 7403077 13962.28 2021-09-14
## 2 VIII. 08 1080 908 90801 1089946 4170.30 2021-09-14
## 3 I. 01 1010 901 90101 2868774 6972.75 2021-09-14
## 4 XVI. 16 1160 916 91601 8673048 18371.08 2021-09-14
## 5 IX. 09 1090 909 90901 2967385 7919.54 2021-09-14
## 6 II. 02 1020 902 90201 19241996 27093.08 2021-09-14
## 7 XVIII. 18 1180 918 91801 6347196 18058.47 2021-09-14
## 8 XVII. 17 1170 917 91701 11396335 29407.73 2021-09-14
## 9 XX. 20 1200 920 92001 5710474 11659.89 2021-09-14
## 10 XIV. 14 1140 914 91401 33760282 40196.94 2021-09-14
## SE_SDO_ROW geometry
## 1 10889 POLYGON ((16.39662 48.20739...
## 2 10890 POLYGON ((16.34915 48.21516...
## 3 10891 POLYGON ((16.37264 48.21662...
## 4 10892 POLYGON ((16.27621 48.22704...
## 5 10893 POLYGON ((16.36165 48.23192...
## 6 10894 POLYGON ((16.40345 48.23192...
## 7 10895 POLYGON ((16.29502 48.24961...
## 8 10896 POLYGON ((16.28516 48.2568,...
## 9 10897 POLYGON ((16.37361 48.26127...
## 10 10898 POLYGON ((16.20914 48.26411...
#Erst definieren wir die tm_shape() methode wo wir die Wiener Bezirksgrenzen ploten.
#Dannach definieren wir mit tm_borders() die Bezirksgrenzen Linien-Breite und Linien Farbe. (White und 2px Breite)
#mit tm_fill stellen wir fest mit welcher Farbe wir die Grafik füllen wollen, in diesem Fall werden die Bezirke "Rot" und für labels benutzen wir die Labes aus dem 1. Schritt. Mit tm_layout() Methode geben wir mehr Informationen wie wir Titel, Legende, Hintergrund und solches gestallten wollen.
wien<-tm_shape(wien_bez) + tm_borders(col = "white", lwd=2) + tm_fill(col="#de2d26", labels=Dis_Label,legend.format="fun") + tm_legend(position = c("right", "bottom"),bg.color="white") + tm_layout(title = "",title.bg.alpha=0.01,scale=0.9,title.size=3, bg.color="white",frame=FALSE,legend.outside=TRUE,legend.outside.position="top",legend.stack="vertical",legend.bg.color="#fc9272",title.bg.color="#fc9272")
#Hier Plotten wir "wien"
wien
In unserem Datensatz ist die Gesamtfläche von Wien 414,8 km^2 oder 414871018 m^2
sum(wien_bez$FLAECHE)
## [1] 414871018
Die größten Wiener Bezirke sind Florisdorf (XXI) und Donaustadt (XXII). Innere Wiener Bezirke, die sogennanten “Ring” und “Gürtel” Bezirke sind relativ zu den äußeren Bezirken kleiner.
#Legende Titel, mit Regex festgemacht um m^2 zu spezifieren.
legend_title <- expression("Fläche (m"^2*")")
#Durch kombination v. tm_shape, tm_fill, tm_border werden die Wien Grenzen geplottet und mit tm_text tie Wiener Bezirke mit Römischen Zeichen beschriftet.
bez_m2<-tm_shape(wien_bez) + tm_fill(col="FLAECHE", title=legend_title) + tm_borders() + tm_text("LABEL", size=1/3)
bez_m2
Donaustadt ist mit einer Fläche von 102,299km^2 der größte Wiener Gemeindebezirk.
#Hiermit stellen wir fest welcher Bezirk die größte Fläche hat
bez_gr<-wien_bez[wien_bez$FLAECHE==max(wien_bez$FLAECHE),]
#Hiermit Ploten wir diesen Bezirk und färben ihm mit Orange
plot(bez_gr[,1],col="#e6550d")
#Um die Fläche in km^2 zu erhalten, müssen wir die m^2 Fläche mit 1e^6 dividieren.
Flaeche<-max(wien_bez$FLAECHE)/1000000
Flaeche
## [1] 102.2995
Um eine bessere Sicht zu ermöglichen, haben wir den größten Wiener Bezirk im Zusammenhang mit restlichen Wiener Bezirken geplottet und nur den Größten eingefärbt.
#Um beide Plots gemeinsam darzustellen haben wir erst Wien geplottet und mit reset=FALSE den Plot behalten.
plot(wien_bez[,3],reset=FALSE, col="white")
#Den zweiten plot haben wir auch geplottet und mit add=TRUE ihm auf ganz Wien Plot hinzugefügt.
plot(bez_gr,add=TRUE, col="#e6550d")
## Warning in plot.sf(bez_gr, add = TRUE, col = "#e6550d"): ignoring all but the
## first attribute
Josefstadt ist mit einer Fläche von 1,09 km^2 der kleinste Wiener Gemeindebezirk.
#Diese Grafik haben wir gleich wie für den Größten Wiener Gemeindebezirk gemacht.
bez_kl<-wien_bez[wien_bez$FLAECHE==min(wien_bez$FLAECHE),]
plot(bez_kl[,1],col="#fee6ce")
Josefstadt Fläche in km^2
Flaeche<-max(wien_bez$FLAECHE)/100000000
Flaeche
## [1] 1.022995
#Beide Plots zusammen (Josefstadt alleine und Josefstadt innerhalt von Wien)
plot(wien_bez[,3],reset=FALSE, col="white")
plot(bez_kl,add=TRUE, col="#fee6ce")
Mit über 1,9 Millionen Einwohnern (etwa ein Fünftel der österreichischen Gesamtbevölkerung) ist Wien die bevölkerungsreichste Großstadt und Primatstadt Österreichs.
Westen, sowie Süden von Wien ist am meisten bewohnt, wobei Favoriten der bevölkerungsreichster Wiener Bezirk ist.
#Für weitere geographischen Plots benutzen wir die data_ges_geom Daten.
#in diesem SF DataFrame sind gibt es 23 Features (Wiener Bezirke) und 50 Felder. Diese 50 Felder sind alle demographische und sozio-ökonomischen Daten enthalten. Die Entstehung dieser Daten wurde schon früher in Dokumentation erkärt.
data_ges_geom <- readRDS(file = "data_ges_geom.rds")
#Zur Erinnerung so sieht der Datensatzt aus:
data_ges_geom
## Simple feature collection with 23 features and 50 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 16.18183 ymin: 48.1179 xmax: 16.57751 ymax: 48.32267
## Geodetic CRS: WGS 84
## First 10 features:
## DISTRICT_CODE 0-18 m% Ben_bis18 19-39 m% 40-64 m% 65+ m%
## 1 90100 0.05436401 0.0005436401 0.1037050 0.1526797 0.09627505
## 2 90200 0.52150727 0.0052150727 0.9821101 0.8879803 0.34235197
## 3 90300 0.38698382 0.0038698382 0.8391626 0.7740723 0.32471898
## 4 90400 0.12981434 0.0012981434 0.2973538 0.2894530 0.12442503
## 5 90500 0.21693279 0.0021693279 0.5584476 0.4748348 0.17277185
## 6 90600 0.10658275 0.0010658275 0.3191727 0.2764245 0.10710599
## 7 90700 0.11082095 0.0011082095 0.3195390 0.2727619 0.10543164
## 8 90800 0.08617663 0.0008617663 0.2706166 0.2089273 0.08696148
## 9 90900 0.15090067 0.0015090067 0.4397781 0.3184402 0.13865699
## 10 91000 1.12783076 0.0112783076 1.8173484 1.7681121 0.70521471
## 0-18 w% 19-39 w% 40-64 w% 65+ w% EDU_ALL EDU_LEH EDU_BMS EDU_AHS
## 1 0.05389310 0.1100884 0.1479706 0.1206577 8.65 9.51 7.53 15.70
## 2 0.48111361 0.9680351 0.8759459 0.4792823 20.76 18.62 7.49 11.70
## 3 0.36689164 0.8304246 0.8104894 0.4642655 16.51 16.63 8.16 12.58
## 4 0.12390180 0.3111149 0.2869938 0.1747078 12.57 12.35 6.37 14.29
## 5 0.21143884 0.5559361 0.4561554 0.2377052 21.54 17.26 7.06 13.17
## 6 0.09847263 0.3272828 0.2712445 0.1498019 13.31 13.76 6.75 14.61
## 7 0.10417588 0.3412532 0.2745932 0.1437324 10.67 11.31 6.07 14.36
## 8 0.08261864 0.2479082 0.2023346 0.1236402 9.98 10.83 6.74 14.95
## 9 0.14483116 0.4657829 0.3382707 0.1948523 11.53 11.25 6.52 14.23
## 10 1.05646165 1.6600120 1.7226431 0.9834182 32.75 27.08 9.36 8.76
## EDU_BHS EDU_KOL EDU_ACA EDU_UNI INC_TOT_VALUE INC_MAL_VALUE INC_FEM_VALUE
## 1 7.00 1.06 2.02 48.52 33256 39889 26266
## 2 6.91 0.91 1.75 31.86 22286 24349 19975
## 3 7.76 1.22 2.04 35.11 24172 26577 21614
## 4 7.51 1.13 1.91 43.87 25878 29397 22219
## 5 6.93 1.15 1.71 31.18 20479 21832 18972
## 6 7.30 1.19 1.87 41.20 23971 26700 21223
## 7 7.36 1.33 1.98 46.91 25100 27920 22355
## 8 6.87 1.15 2.19 47.30 25142 28198 22088
## 9 6.88 1.05 1.94 46.61 24701 27464 22029
## 10 6.99 0.73 1.24 13.10 19478 20761 17864
## Bevölkerung TeilgeimpftePro100 VollimmunisiertePro100 ungültig% oevp%
## 1 15867 71.88504 68.17924 75.95990 0.1783894
## 2 105237 67.14083 61.99341 69.78909 0.5080554
## 3 93248 70.72216 66.18373 72.75799 0.4433084
## 4 33075 70.62434 66.37944 75.80724 0.3913894
## 5 54373 67.95652 62.95956 70.59942 0.3351595
## 6 31336 72.62254 68.65905 74.05903 0.4258235
## 7 31683 73.96080 70.06597 77.98014 0.3535965
## 8 24365 71.77509 68.28237 79.99874 0.3854904
## 9 41812 72.94557 68.94432 76.45438 0.3712492
## 10 210573 63.53616 57.18112 64.01833 0.6836873
## spoe% fpoe% gruene% neos% pilz% kpoe% wandl% bpoe%
## 1 27.81176 12.63167 5.750934 14.160720 12.682637 2.200136 0.3058104 0.2208631
## 2 13.43338 19.25931 6.775186 19.779063 6.895514 2.112441 0.7236446 0.4194799
## 3 17.22825 17.33193 6.690739 19.067622 8.757128 2.313069 0.6345745 0.3878948
## 4 17.89139 15.61155 5.225049 22.910959 10.386497 2.617417 0.5968689 0.3571429
## 5 13.29359 18.84306 5.820174 21.279407 7.273606 2.433129 0.7573316 0.5381888
## 6 14.68846 15.71631 5.183300 25.197005 9.363223 2.603886 0.6460770 0.3915618
## 7 14.00823 15.11746 4.495035 29.275854 10.273674 3.351901 0.7410995 0.5328167
## 8 18.40243 14.42745 4.935541 26.036400 11.457280 3.222952 0.8404954 0.3981294
## 9 16.80190 14.99923 5.128598 24.525413 10.819810 2.709737 0.6889161 0.4286589
## 10 14.70521 23.57763 11.029365 7.967833 3.893093 1.570929 0.5129937 0.3140033
## AGE_AVE NAMEK BEZNR BEZ_RZ NAMEK_NUM NAMEK_RZ
## 1 47.45 Innere Stadt 1 I 1., Innere Stadt I. Innere Stadt
## 2 39.92 Leopoldstadt 2 II 2., Leopoldstadt II. Leopoldstadt
## 3 41.54 Landstra<df>e 3 III 3., Landstra<df>e III. Landstra<df>e
## 4 42.14 Wieden 4 IV 4., Wieden IV. Wieden
## 5 40.33 Margareten 5 V 5., Margareten V. Margareten
## 6 41.67 Mariahilf 6 VI 6., Mariahilf VI. Mariahilf
## 7 41.16 Neubau 7 VII 7., Neubau VII. Neubau
## 8 41.21 Josefstadt 8 VIII 8., Josefstadt VIII. Josefstadt
## 9 40.47 Alsergrund 9 IX 9., Alsergrund IX. Alsergrund
## 10 39.93 Favoriten 10 X 10., Favoriten X. Favoriten
## NAMEG LABEL BEZ DISTRICT_C STATAUSTRI STATAUSTR0 FLAECHE UMFANG
## 1 INNERE STADT I. 01 1010 901 90101 2868774 6972.75
## 2 LEOPOLDSTADT II. 02 1020 902 90201 19241996 27093.08
## 3 LANDSTRASSE III. 03 1030 903 90301 7403077 13962.28
## 4 WIEDEN IV. 04 1040 904 90401 1776323 5634.81
## 5 MARGARETEN V. 05 1050 905 90501 2011639 6342.24
## 6 MARIAHILF VI. 06 1060 906 90601 1455044 5939.72
## 7 NEUBAU VII. 07 1070 907 90701 1608248 5312.54
## 8 JOSEFSTADT VIII. 08 1080 908 90801 1089946 4170.30
## 9 ALSERGRUND IX. 09 1090 909 90901 2967385 7919.54
## 10 FAVORITEN X. 10 1100 910 91001 31822105 28695.45
## AKT_TIMEST SE_SDO_ROW geometry
## 1 2021-09-14 10891 POLYGON ((16.37264 48.21662...
## 2 2021-09-14 10894 POLYGON ((16.40345 48.23192...
## 3 2021-09-14 10889 POLYGON ((16.39662 48.20739...
## 4 2021-09-14 10903 POLYGON ((16.36916 48.20071...
## 5 2021-09-14 10884 POLYGON ((16.35945 48.19662...
## 6 2021-09-14 10885 POLYGON ((16.36306 48.20183...
## 7 2021-09-14 10888 POLYGON ((16.33873 48.20854...
## 8 2021-09-14 10890 POLYGON ((16.34915 48.21516...
## 9 2021-09-14 10893 POLYGON ((16.36165 48.23192...
## 10 2021-09-14 10902 POLYGON ((16.38107 48.18807...
#Wir plotten mit tm_shape die Wiener Bezirksgrenzen und mit tm_polygon färben wir diese gemäß der Bevölkerung-Größe.
wien_pop<-tm_shape(data_ges_geom) + tm_polygons(col="Bevölkerung", palette="Purples", title="Bevölkerung in Wiener Bezirken") +tm_text("LABEL", size=1/2)
#Plotten
wien_pop
Um die Frage zu beantworten, welche Bezirke in Wien am dichtesten bewohnt sind, ist es notwendig zu zeigen wie viele Wiener pro m^2 in den jeweiligen Bezirken wohnen. Dies bewerkstelligen wir, indem wir die Anzahl der Bewohner (Bevölkerung) mit der Fläche dividieren.
#Um die Fragestellung zu beantworten haben wir eine neue Spalte hinzugefügt
#wir erstellen eine neue Spalte "drchn_pro_m2" und befüllen diese anhand zwei existierende Spalten "Bevölkerung" und "Fläche" (Bevölkerung dividiert durch Fläche)
data_ges_geom$drchn_pro_m2<-data_ges_geom$Bevölkerung/(data_ges_geom$FLAECHE)
# Wir plotten mit tn_shaoe die Wiener Grenzen und befüllen mit tm_polygons die Flächen mit der "Bevölkerungsdichte" Spalte.
wiener_pro_m2<-tm_shape(data_ges_geom) + tm_polygons(col="drchn_pro_m2", palette="Purples", title="Wiener pro m2") + tm_text("LABEL", size=1/2)
#Output
wiener_pro_m2
Die ältesten Bezirke sind die “Innere Stadt” und “Hitzing wo das Durchschittsalter zwischen 46 und 48 Jahren liegt. Die jüngsten Wiener wohnen in Simmering wo das Durchnittsalter bei 39.29 Jahren liegt.
#Wir plotten mit tn_shape die Wiener Grenzen und befüllen mit tm_fill die Bezirke mit "AGE_AVE". Für die Choro-Grafik Füllung haben wir die R Brewer Palette "BuGn" genommen. Mit tm_borders haben wir die Wien Bezirksgrenzen mit weißer Farbe markiert und mit tm_text Methode haben wir die Flächen beschriftet.
wien_avg_age<-tm_shape(data_ges_geom) +tm_fill(col="AGE_AVE", n=5, palette="BuGn",title="Durchschnittsalter der Wiener") +tm_borders(col="white", lwd=2, lty=1) +tm_text("LABEL", size=1/2)
wien_avg_age
In Wien wohnen mehr Frauen als Männer. Dieses Verhältnis ist in den Bezirken Währing, Hernals, Hietzing, Liesing und Alsergrund am stärksten ausgeprägt. In nur einem Wiener Bezirk wohnen mehr Männer als Frauen und zwar in Rudolfsheim-Fünfhaus. Es ist wichtig zu sagen, dass in keinem Bezirk liegt eine Grupper deutlich im Vorsprung.
#data_ges_geom_v2 beinhaltet die % Verteilungen pro Bezirk zwischen Männer und Frauen
#die m und w Spalte haben wir mit merge Methode zu data_ges_geom_v2 hinzugefügt.
data_ges_geom_v2 <- readRDS(file = "data_ges_geom_v2.rds")
#Erst plotten wir die Männer Bezirke mit der üblicher Methode tm_shape für Wien Bezirke, tm_fill für CHoreopleth Füllung nach Spalte m/w und mit tm_text Beschriften wir die Bezirke
male_wien<-tm_shape(data_ges_geom_v2) + tm_fill(col="m", palette="Blues", title="% Männlich") +tm_text("LABEL", size=1/2) + tm_layout(legend.title.size=1,frame=FALSE)
#Das gleiche machen wir für Frauen Grafik
female_wien<-tm_shape(data_ges_geom_v2) + tm_fill(col="w",palette="RdPu" ,title="% Weiblich") +tm_text("LABEL", size=1/2) + tm_layout(legend.title.size=1,frame=FALSE)
# mit tmap_arrange Methode plotten wir beide Grafiken in einer Zeile.
tmap_arrange(male_wien,female_wien, ncol=2, nrow=1)
Die Bevölkerungsgruppe 65 und älter ist am häufigsten in Donaustadt und Favoriten vertreten. Die Bevölkerungsgruppe 0-18 Jahren ist ebenfalls am häufigstens in Favoriten und Donaustadt vertreten.
Die Gruppe von Menschen zwischen 19 und 39 Jahren sind am häufigsten in Favoriten vertreten.
#Für die Darstellung, benutzen wir die data_ges_geom_v2 Daten.
#Wir zählen die jeweiligen Frauen und Männer Gruppen zusammen.
data_ges_geom_v2$'0_18g'<-data_ges_geom_v2$`0-18 m%`+data_ges_geom_v2$`0-18 w%`
data_ges_geom_v2$'19_39g'<-data_ges_geom_v2$`19-39 m%`+data_ges_geom_v2$`19-39 w%`
data_ges_geom_v2$'40_64g'<-data_ges_geom_v2$`40-64 m%`+data_ges_geom_v2$`40-64 w%`
data_ges_geom_v2$'65+g'<-data_ges_geom_v2$`65+ m%`+data_ges_geom_v2$`65+ w%`
#Wir definieren die Grafiken für alle Gruppen mit der üblicher tm_shape, tm_fill und tm_borders Methoden.
bev_alt18<-tm_shape(data_ges_geom_v2) + tm_fill(col ='0_18g', palette="PuBuGn" ) + tm_borders(col="white", lwd=2)+tm_text("LABEL", size=1/2)
bev_alt39<-tm_shape(data_ges_geom_v2) + tm_fill(col ='19_39g' , palette="YlOrRd") + tm_borders(col="black", lwd=2)+tm_text("LABEL", size=1/2)
bev_alt64<-tm_shape(data_ges_geom_v2) + tm_fill(col ='40_64g' , palette="YlGnBu") + tm_borders(col="white", lwd=2)+tm_text("LABEL", size=1/2)
bev_alt65<-tm_shape(data_ges_geom_v2) + tm_fill(col ='65+g' , palette="YlOrBr") + tm_borders(col="black", lwd=2)+tm_text("LABEL", size=1/2)
#Mit tmap_arrange plotten wir alle Grafiken zusammen in zwei Spalten und zwei Zeilen.
tmap_arrange(bev_alt18,bev_alt65,bev_alt39,bev_alt64, nrow=2, ncol=2)
Uni-AbsolventInnen sind in den inneren Bezirken am stärksten vertreten. In Donaustadt leben die meisten BHS und BMS Absolventinnen. Wenn es um die Lehre-AbsolventInnen geht, hat Simmering einen klaren Vorsprung. In dem 10. Wiener Gemeindebezirk, Favoriten, haben die Bewohner am meisten einen Pflichtschulabschluss.
#Für die Darstellung benutzen wir die data_ges_geom_v3 welche die Bildungsdaten der Wiener Bevölkerung enthält.
data_ges_geom_v3 <- readRDS(file = "data_ges_geom_v3.rds")
#Mit tm_shape, tm_fill, tm_borders definieren wir Plots für alle Abschluss Gruppen der Wiener.
Wien_Bildung_UNI=tm_shape(data_ges_geom_v3) + tm_fill(col = "Universität", n=3, alpha=1, palette="Reds", title="Universität %") + tm_borders(col="Black", alpha=0.8)+tm_layout(legend.title.size=1,frame=FALSE)+tm_text("LABEL", size=1/2)
Wien_Bildung_AKD=tm_shape(data_ges_geom_v3) + tm_fill(col = "Akademie", n=3, alpha=1, palette="Oranges", title="Akademie %",frame = F, title.size = 100) + tm_borders(col="White", alpha=0.8)+tm_layout(legend.title.size=1,frame=FALSE)+tm_text("LABEL", size=1/2)
Wien_Bildung_KOL=tm_shape(data_ges_geom_v3) + tm_fill(col = "Kolleg", n=3, alpha=1, palette="Greens", title="Kolleg %",frame = F, title.size = 100) + tm_borders(col="White", alpha=0.8)+tm_layout(legend.title.size=1,frame=FALSE)+tm_text("LABEL", size=1/2)
Wien_Bildung_BHS=tm_shape(data_ges_geom_v3) + tm_fill(col = "BHS", n=3, alpha=1, palette="BuGn", title="BHS %",frame = F, title.size = 100) + tm_borders(col="White", alpha=0.8)+tm_layout(legend.title.size=1,frame=FALSE)+tm_text("LABEL", size=1/2)
Wien_Bildung_AHS=tm_shape(data_ges_geom_v3) + tm_fill(col = "AHS", n=3, alpha=1, palette="Blues", title="AHS %",frame = F, title.size = 100) + tm_borders(col="White", alpha=0.8)+tm_layout(legend.title.size=1,frame=FALSE)+tm_text("LABEL", size=1/2)
Wien_Bildung_BMS=tm_shape(data_ges_geom_v3) + tm_fill(col = "BMS", n=3, alpha=1, palette="PuBu", title="BMS %",frame = F, title.size = 100) + tm_borders(col="White", alpha=0.8)+tm_layout(legend.title.size=1,frame=FALSE)+tm_text("LABEL", size=1/2)
Wien_Bildung_Lehr=tm_shape(data_ges_geom_v3) + tm_fill(col = "Lehre", n=3, alpha=1, palette="RdPu", title="Lehre %",frame = F, title.size = 100) + tm_borders(col="White", alpha=0.8)+tm_layout(legend.title.size=1,frame=FALSE)+tm_text("LABEL", size=1/2)
Wien_Bildung_Pflicht=tm_shape(data_ges_geom_v3) + tm_fill(col = "Pflichtschule", n=3, alpha=1, palette="PuRd", title="Pflichtschule %",frame = F, title.size = 100) + tm_borders(col="White", alpha=0.8)+tm_layout(legend.title.size=1,frame=FALSE)+tm_text("LABEL", size=1/2)
#Mit tmap_arrange plotten wir alle Gruppen in einer 4x2 Matrix zusammen.
tmap_arrange(Wien_Bildung_UNI, Wien_Bildung_AKD, Wien_Bildung_KOL, Wien_Bildung_BHS, Wien_Bildung_AHS, Wien_Bildung_BMS, Wien_Bildung_Lehr, Wien_Bildung_Pflicht, nrow=4, ncol=2)
Wenn es um Verdienst und Reichtum der Wiener geht, ist es notwendig zwischen Einkommen und Vermögen zu unterscheiden. Einkommen ist eine Stromgröße und bezeichnet das steuerpflichtigen Einkommen der Arbeitnehmer*Innen, wo das Vermögen eine Bestandsgröße ist und bezeichnet hingehen immaterielle und materielle Sachen, die die Bevölkerung besitzt.
Das höchste durchschnittliche Bruttojahreseinkommen in Wien gibt es in der Bezirk “Innere Stadt” gefolgt von den Ring-Bezirken, Donaustadt, Währing und Hietzing. Männer verdienen im Durchnitt mehr als Frauen in allen Bezirken. Das Einkommen von Frauen ist im Bezirk “Innere Stadt” und “Hietzing” am höchsten aber immerhin niedriger als das von Männern.
#Wir benutzen die data_ges_geom als Basis für die Darstellung
#Erst definieren wir die Grafik für Einkommen Total
inc_tot<-tm_shape(data_ges_geom) + tm_fill(col = "INC_TOT_VALUE", alpha=0.8, title="Durch. Bruttojahreseinkommen") + tm_borders(col="white", alpha=0.7, lwd=1.7, lty="11")+tm_text("LABEL", size=1/2)
#Danach definieren wir die Grafiken für Männer und Frauen mit tm_shape, tm_fill, tm_border und tm_text Methode.
inc_male<-tm_shape(data_ges_geom) + tm_fill(col = "INC_MAL_VALUE", alpha=0.8, title="Bruttojahreseinkommen der Männer", palette = "PuBu") + tm_borders(col="white", alpha=0.7, lwd=1.7, lty="11")+tm_text("LABEL", size=1/2)
inc_female<-tm_shape(data_ges_geom)+ tm_layout(title = '') + tm_fill(col = "INC_FEM_VALUE", alpha=0.8, title ="Bruttojahreseinkommen der Frauen", palette = "RdPu" , interactive = TRUE) + tm_borders(col="white", alpha=0.7, lwd=1.7, lty="11")+tm_text("LABEL", size=1/2)
#Total-Einkommen wird geplottet
inc_tot
#mit tmap_arrange plotten wir Männer und Frauen Einkommen nebeneinander.
tmap_arrange(inc_male,inc_female, ncol=2)
Am 29.09.2019 fand die 27. Nationalratswahl in Österreich statt. Stimmenstärkste Partei wurde die ÖVP mit 37,5%. Auf dem zweiten Platz erhielt die SPÖ 21,2%. Mit 13,9% haben die Grünen das beste Nationalratsergebnis ihrer Geschichte erreicht.
Wien war nicht viel anders und die Wiener Bevölkerung hat die meisten Stimmen zu SPÖ gefolgt von ÖVP gegeben.
ÖVP Bezirken waren “Innere Stadt”, “Hietzing” und “Währing” SPÖ Bezirken waren “Favoriten”, “Simmering” und “Brigittenau” Die Grünen haben die meisten Stimmen in den “Ring Bezirken” und gewonnen haben sie auch in Neubau.
#Wir haben als Basis für diese Darstellung data_ges_geom_v4 benutzt. Diese Version beinhaltet die richtige Werte für die NRW2019.
data_ges_geom_v4 <- readRDS(file = "data_ges_geom_v4.rds")
# Um herauszufinden wo die jeweilige Parteien die meisten Stimmen erzielt haben, war es notwendig für die 4 stärksten Parteien einen Plot zu machen befüllt nach % der gewonnen Stimmen. Wir haben die ÖVP, SPÖ, FPÖ und Grünen Grafiken anhand tm_border, tm_fill, tm_borders und tm_text definiert.
Wien_ÖVP<-tm_shape(data_ges_geom_v4) +tm_fill(col="ÖVP", title="ÖVP %",palette = "YlGnBu") + tm_borders(col="White", alpha=0.8)+tm_text("LABEL", size=1/2)+tm_layout(legend.title.size=1,frame=FALSE)
Wien_SPÖ<-tm_shape(data_ges_geom_v4) +tm_fill(col="SPÖ", title="SPÖ %",palette = "Reds") + tm_borders(col="White", alpha=0.8)+tm_text("LABEL", size=1/2)+tm_layout(legend.title.size=1,frame=FALSE)
Wien_GRUE<-tm_shape(data_ges_geom_v4) +tm_fill(col="GRÜNE", title="GRÜNE %",palette = "Greens") + tm_borders(col="White", alpha=0.8)+tm_text("LABEL", size=1/2)+tm_layout(legend.title.size=1,frame=FALSE)
Wien_FPÖ<-tm_shape(data_ges_geom_v4) +tm_fill(col="FPÖ", title="FPÖ %",palette = "Blues") + tm_borders(col="White", alpha=0.8)+tm_text("LABEL", size=1/2)+tm_layout(legend.title.size=1,frame=FALSE)
#Mit tmap_arrange haben wir alle Grafiken zusammen in einer Matrix der Form 2x2 dargestellt.
tmap_arrange(Wien_ÖVP,Wien_SPÖ,Wien_GRUE,Wien_FPÖ, nrow=2,ncol=2)
Für uns war es wichtig zu sehen, wie die Wiener Linien Haltestellen über Wien verteilt sind. Wir wollten sehen, in welchen Regionen von Wien gibt es die meisten Haltestellen. In der Grafik kann man sehen, dass in Bezirken die in der Mitte von Wien liegen die höchste Anzahl an Haltestellen vorweisen. Je mehr man sich nach außen bewegt, desto weniger werden die Haltestellen. Mit roten Punkten haben wir die Impfzentren gemappt. Die Impfzentren überlappen sich mit den Rastern die größere Anzahl an Rastern vorzeigen können.
#Als Input Datei benutzen wir die Wiener Linien Haltestellen. Wir brauchen die Punkte aus dieser Datei.
wl <- readRDS(file = "wl.rds")
#Der DS beinhaltet 4763 Feutures (Haltestellen) und 6 Felder. Wie schon Angemerkt ist die Geometry "Punkt"
wl
## Simple feature collection with 4763 features and 6 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: 16.18826 ymin: 48.12287 xmax: 16.54427 ymax: 48.31134
## Geodetic CRS: WGS 84
## First 10 features:
## OBJECTID HTXT HTXTK HLINIEN DIVA_ID LTYP
## 1 472885 Reumannplatz Reumannplatz U1 1095 4
## 2 472886 J<e4>gerstra<df>e J<e4>gerstra<df>e U6 1667 4
## 3 472887 Pilgramgasse Pilgramgasse U4 1018 4
## 4 472888 Schottentor Schottentor U2 1184 4
## 5 472889 Hietzing Hietzing U4 520 4
## 6 472890 Sch<f6>nbrunn Sch<f6>nbrunn U4 1211 4
## 7 472891 Ober Sankt Veit Ober Sankt Veit U4 956 4
## 8 472892 Taubstummengasse Taubstummengasse U1 1366 4
## 9 472893 Neue Donau Neue Donau U6 1668 4
## 10 472894 Michelbeuern-AKH Michelbeuern-AKH U6 874 4
## geometry
## 1 POINT (16.37789 48.17502)
## 2 POINT (16.36856 48.23522)
## 3 POINT (16.35424 48.19203)
## 4 POINT (16.36313 48.21514)
## 5 POINT (16.30503 48.18755)
## 6 POINT (16.31914 48.18599)
## 7 POINT (16.27621 48.19224)
## 8 POINT (16.37034 48.19392)
## 9 POINT (16.39483 48.24641)
## 10 POINT (16.34428 48.22128)
#Wir Laden die Impfstellen Punkte dazu. Um unsere Grafik besser zu gestalten.
wl_impf_halt <- readRDS(file = "wl_impf_halt.rds")
wien_impfstellen<-readRDS(file= "wien_impfstellen.rds")
#Hier machen wir den Wiener Linien Grundraster.
wl_raster<- raster(extent(wl), resolution = 0.01)
#Anzahl an Haltestellen pro Raster
wl_raster_anz <- rasterize(wl, wl_raster,
field = 1, fun = "count")
legend_title <- expression("Anzahl an Haltestellen pro Raster")
#Plot von Anzahl an Haltestellen pro Raster.
#Wir starten erst mit Wien Grenze
wien_rast_anzwl_impf <- tm_shape(wien_bez)
wien_rast_anzwl_impf <- wien_rast_anzwl_impf + tm_borders()
#Wir legen unseren Raster oberhalb von Wien
wien_rast_anzwl_impf <- wien_rast_anzwl_impf + tm_shape(wl_raster_anz) + tm_raster( title=legend_title)
#Danach legen wir die Punkte auf von Haltestellen über die vorige 2 Grafiken
wien_rast_anzwl_impf <- wien_rast_anzwl_impf + tm_shape(wien_bez) + tm_borders()
#Hiermit ploten wir alles zusammen
wien_rast_anzwl_impf
Hier haben wir die Impfzentren-Punkte auf einer interaktiven Karte Wiens dargestellt.
# Mit der tmap_mode Methode entscheiden wir uns für eine Interaktive Grafik.
tmap_mode("view")
## tmap mode set to interactive viewing
#tif_sf enthält alle long und lat Koordinaten von Wiener Impfstellen
tif_sf<-readRDS("tif_sf.RDS")
tif_sf
## Simple feature collection with 24 features and 8 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: 16.21712 ymin: 48.1373 xmax: 16.47231 ymax: 48.26871
## Geodetic CRS: WGS 84
## # A tibble: 24 x 9
## Nummer Impfstellen_Typ Name Strasse Zusatzinfo PLZ Bezirk location
## * <dbl> <chr> <chr> <chr> <chr> <dbl> <chr> <chr>
## 1 1 Impfzentrum Karmel~ Karmelit~ 1. Stock 1020 Leopo~ Karmelite~
## 2 2 Impfzentrum TownTo~ Thomas-K~ 2 1030 Lands~ Thomas-Kl~
## 3 3 Impfzentrum Gesund~ Wienerbe~ <NA> 1100 Favor~ Wienerber~
## 4 4 Impfzentrum Am Sch~ Am Schöp~ 11/R10 1120 Meidl~ Am Schöpf~
## 5 5 Impfzentrum Gasgas~ Gasgasse~ Eingang: St~ 1150 Rudol~ Gasgasse ~
## 6 6 Impfzentrum Martin~ Martinst~ 1. Stock 1180 Währi~ Martinstr~
## 7 7 Impfzentrum Gesund~ Karl-Asc~ <NA> 1210 Flori~ Karl-Asch~
## 8 8 Impfzentrum Wasser~ Wasserma~ <NA> 1210 Flori~ Wasserman~
## 9 9 Impfzentrum Sanatr~ Franz Jo~ 1/2. Stock 1210 Flori~ Franz Jon~
## 10 10 Impfzentrum Schröd~ Bernoull~ Eingang: VH~ 1220 Donau~ Bernoulli~
## # ... with 14 more rows, and 1 more variable: geometry <POINT [°]>
#mit tm_shape plotten wir die Wiener Bezirke, mit tm_borders() plotten wir Wiener Bezirksgrenzen und mit tm_basemap und server="OpenStreetMap" ermöglichen wir die interaktive Basemappe.
tm_shape(wien_bez)+tm_borders(col="red")+tm_shape(tif_sf)+tm_dots()+tm_basemap(server="OpenStreetMap",alpha=0.5)
Hier haben wir die Impfordinationen auf einer interaktiven Karte Wiens dargestellt. Wenn man auf die Punkte klickt, sieht man alle Informationen im Zusammenhang mit der Impfordination.
#taf_sf ist die Impfordination Datei
taf_sf<-readRDS("taf_sf.RDS")
taf_sf
## Simple feature collection with 199 features and 12 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: 12.15145 ymin: 48.12593 xmax: 16.52682 ymax: 53.94708
## Geodetic CRS: WGS 84
## # A tibble: 199 x 13
## ï..Fach Titel Name Vorname PLZ Ordinationsadre~ Tel.nr. Details X
## * <chr> <chr> <chr> <chr> <dbl> <chr> <chr> <chr> <lgl>
## 1 Allgemei~ Assoc.~ Bohdj~ Arthur 1010 Kärntner Strass~ 890-40~ <NA> NA
## 2 Innere M~ Priv.D~ Kikic Zeljko 1010 Rathausstrasse ~ 470-61~ <NA> NA
## 3 Neurolog~ Dr. Litta~ Gabor 1010 Sonnenfelsgasse~ 0660/8~ <NA> NA
## 4 Plastisc~ Dr. Milani Shirin 1010 Schottengasse 7~ 236 13~ <NA> NA
## 5 Urologie Univ.P~ Shari~ Shahro~ 1010 Rathausstrasse ~ 470 61~ <NA> NA
## 6 Allgemei~ Dr. Brandl Rainer 1020 Grosse Pfarrgas~ 890 24~ <NA> NA
## 7 Allgemei~ MR Dr. Dolhyj Gerald 1020 Weintraubengass~ 216-53~ <NA> NA
## 8 Orthopä~ Dr. Lehner Alexan~ 1020 Ausstellungsstr~ 728 61~ <NA> NA
## 9 Allgemei~ Dr. Rasso~ Rahman 1020 Vorgartenstrass~ 729 77~ <NA> NA
## 10 Allgemei~ Dr. Rodler Thomas 1020 Sellenygasse 5 890 15~ <NA> NA
## # ... with 189 more rows, and 4 more variables: PLZ_Adresse <chr>,
## # location <chr>, lat_long <lgl>, geometry <POINT [°]>
#Mit tm_shape wien_bez plotten wir die Wien Bezirken und mit tm_borders die dazugehörige grenzen und mit einer Kombination von tm_shape und tm_dots geben wir die Impfordinationen als Punkte dazu.
tm_shape(wien_bez)+tm_borders(col="red")+tm_shape(taf_sf)+tm_dots()
Datenstand ist November 2021 Bezirke die am meisten Vollimmunisierte pro 100 Einwohner haben, sind die Wiener “Ring-Bezirke” und die Bezirke im Norden und Westen von Wien. Die Bezirke Favoriten, Simmering, Leopoldstadt und Brigitenau haben die niedrigste Anzahl an Vollimmunisierte pro 100 Einwohner.
#Hiermit ermöglichen wir interaktives Plotten
tmap_mode("view")
## tmap mode set to interactive viewing
#Mit der tm_map Methoden: tm_shape zeichnen wir Wiener Bezirke, mit tm_fill füllen wir die Wiener Polygone mit der Anzahl an Vollimunisierten pro 100 und mit tm_borders() zeichnen wir die Grenzen von Wiener Bezirken. Mit tm_basemap wir nehmen OpenStreetMape als die basismape für interaktives plotten.
vollimm<-tm_shape(data_ges_geom) +
tm_fill("VollimmunisiertePro100",title="Vollimmunisierte Pro 100",alpha=0.575) +
tm_borders() +
tm_basemap(server="OpenStreetMap",alpha=0.5)
vollimm
Was für die Vollimunisierte pro 100 gilt, gilt auch für Teilimmunisierte (Teilgeinmpfte) pro 100.
#Hiermit ermöglichen wir Interaktives Plotten
tmap_mode("view")
## tmap mode set to interactive viewing
#Mit der tm_map Methoden: tm_shape zeichnen wir Wiener Bezirke, mit tm_fill füllen wir die Wiener Polygone mit der Anzahl an Teilgeimpften pro 100 und mit tm_borders() zeichnen wir die Grenzen von Wiener Bezirken. Mit tm_basemap wir nehmen OpenStreetMape als die basismape für interaktives plotten.
teilimm<-tm_shape(data_ges_geom) +
tm_fill("TeilgeimpftePro100",title="Teilgeimpfte Pro 100",alpha=0.575, palette="Blues") +
tm_borders() +
tm_basemap(server="OpenStreetMap",alpha=0.5)
teilimm
Ausgehend von den Erkenntnissen der deskriptiven Auswertung bei den Impfzentren und privaten Impfordinationen wurden zunächst erste Versuche unternommen einen Zusammenhang zwischen den Größen darzustellen. Hierzu wurden die erhobenen Prädiktoren und die Zielgrößen gegeneinander geplottet. Weiters wurde durch simple lineare Modelle versucht Zusammenhänge zwischen den Größen festzustellen.
Nun kommen wir endlich zum Kern der Arbeit, nämlich der Frage, ob ein Zusammenhang zwischen den erhobenen Prädiktoren und der Höhe der Vollimmunisierten bzw. Teilgeimpften pro 100 Einwohner besteht.
Als erstes wurde die Anzahl an Privatordinationen je Bezirk (auf der X-Achse) im Vergleich zur Immunisierungsquote (auf der Y-Achse) im Scatterplot dargestellt. Grundsätzlich zeigt sich, dass die Verteilung der Teilgeimpften und der Vollimmuniserten nahezu gleich sind. Einzig ist der Wert der Teilgeimpften stets um ein paar Prozentpunkte höher.
Nichtsdestotrotz zeigt sich hier kein eindeutiger Zusammenhang zwischen den zwei Größen. Die Werte scheinen nahezu geradlinig verteilt zu sein. Es zeigt sich auf den ersten Blick kein eindeutiger Trend der dafür spricht, dass eine höhere Anzahl an Ordinationen auch mit einer höheren Immunisierungsquote einhergeht.
Als nächstes wurde die Anzahl an Impfzentren je Bezirk (auf der X-Achse) im Vergleich zur Immunisierungsquote (auf der Y-Achse) im Scatterplot dargestellt. Ähnlich wie zuvor ist wieder kein klarer Trend erkennbar. Es scheint keinen klaren Zusammenhang zwischen der Anzahl an Impfzentren je Bezirk und der Immunisierungsquote zu geben.
In diesem Scatterplot wurde die Anzahl an Impfzentren im Umkreis von 500 Metern zu den Haltestellen je Bezirk (auf der X-Achse) im Vergleich zur Immunisierungsquote (auf der Y-Achse) im Scatterplot dargestellt. Es zeigt sich eine gewisse Linksverteilung. Die zwei Bezirke mit höherer Anzahl an Impfstellen zeigen keine klare Tendenz zu einer höheren bzw. niedrigeres Impfquote. Die Daten sind erneut sehr stark horizontal verteilt.
In diesem Scatterplot wurde die Anzahl an Privatordinationen im Umkreis von 500 Metern zu den Haltestellen je Bezirk (auf der X-Achse) im Vergleich zur Immunisierungsquote (auf der Y-Achse) im Scatterplot dargestellt. Die Mehrzahl der Bezirke zeigen eine Anzahl an Ordinations-Haltestellen im Bereich zwischen 50 bis etwa 250.
Nachdem ein simples Plotten der Daten in der ursprünglichen Form keinerlei Zusammenhang gezeigt haben, wurde nachfolgend versucht, ob durch verschiedene Transformationsverfahren nicht doch ein Zusammenhang festzustellen ist.
Im ersten Plot links oben zeigen sich erneut die Daten ohne Verwendung einer Transformation. Bei der zweiten Darstellung rechts oben wird die Wurzel aus allen Daten auf der X-Achse gezogen. Es zeigt sich eine leichte Verschiebung der Daten nach rechts. Beim Plot mit dem Titel log-Transformation wurden die X-Werte mit dem Logarithmus transformiert. Dies führt erneut nur zu einer Rechtsverschiebung der Datenpunkte. Durch Transformation der X-Werte mittels Kehrwert werden die Mehrzahl der Datenpunkte an das linke Ende verschoben. Kurz zusammengefasst kann festgestellt werden, dass keine der gängigen Transformationen einen Trend oder Zusammenhang erkennen lässt. Die Daten wirken als ob diese rein zufällig verteilt sind.
Ähnlich dem vorherigen Beispiel wurde dieselbe Darstellung derselben 4 Plots mit drei verschiedenen Transformationen gewählt. Dieses Mal wurde jedoch der Y-Wert statt dem X-Wert entsprechend transformiert. Im Gegensatz zu einer X-Wert-Transformation scheint die Transformation der Y-Werte kaum Einfluss auf die Darstellung der Datenpunkte zu haben. Auch hier kann gefolgert werden, dass rein optisch keinerlei Zusammenhang ablesbar ist.
Nachdem das Plotten der Daten auf keinerlei Korrelation hindeutete, wurde im nächsten Schritt versucht, ob die Kombination mehrerer Prädiktoren möglicherweise Erklärungswert für die Zielvariablen liefern.
Die Verwendung aller vier Variablen ergab, dass zwar das Intercept sowie die Anzahl an Impfzentren (Anzahl_Impfz), die Anzahl an Haltestellen im Umkreis zu Impfzentren (Impf_Haltestellen) sowie die Anzahl an Haltestellen im Umkreis zu Ordinationen (Ord_Haltestellen) noch signifikant sind, nicht jedoch die Anzahl der Ordinationen je Bezirk (Anzahl_Ord).
Bei Verwendung der zwei vielversprechendsten Prädiktoren, nämlich Anzahl_Impfz und Impf_Haltestellen, zeigt sich in der Summary ein adjustiertes Bestimmtheitsmaß (adjusted R^2) von gerade einmal 0.297.
##
## Call:
## lm(formula = VollimmunisiertePro100 ~ Anzahl_Impfz + Impf_Haltestellen +
## Ord_Haltestellen + Anzahl_Ord, data = Data_Gesamt)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.128 -2.385 0.083 2.001 5.088
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 68.77297 1.76777 38.904 < 2e-16 ***
## Anzahl_Impfz -6.07121 1.62132 -3.745 0.00148 **
## Impf_Haltestellen 0.15280 0.04903 3.116 0.00596 **
## Ord_Haltestellen -0.02624 0.01092 -2.402 0.02733 *
## Anzahl_Ord 0.26487 0.21912 1.209 0.24237
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.124 on 18 degrees of freedom
## Multiple R-squared: 0.517, Adjusted R-squared: 0.4096
## F-statistic: 4.816 on 4 and 18 DF, p-value: 0.008091
##
## Call:
## lm(formula = VollimmunisiertePro100 ~ Anzahl_Impfz + Impf_Haltestellen,
## data = Data_Gesamt)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.428 -2.916 1.180 2.094 5.825
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 66.98896 1.12199 59.706 < 2e-16 ***
## Anzahl_Impfz -5.13277 1.59477 -3.219 0.00431 **
## Impf_Haltestellen 0.11338 0.05041 2.249 0.03593 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.409 on 20 degrees of freedom
## Multiple R-squared: 0.3609, Adjusted R-squared: 0.297
## F-statistic: 5.647 on 2 and 20 DF, p-value: 0.01137
Unter zur Hilfenahme des Packages Plotly, dass drei dimensionale Graphiken ermöglicht, konnte diese Form der multiplen Regression ebenfalls graphisch dargestellt werden. Wie jedoch zu sehen ist, besteht keinerlei linearer Zusammenhang zwischen den Variablen.
Schlussendlich kann damit festgestellt werden, dass die Zielvariablen Vollimmunisierte pro 100 Einwohner sowie Teilgeimpfte pro 100 Einwohner weder durch die Anzahl an Impfzentren, der Anzahl an Ordinationen, der Anzahl an Haltestellen im Umkreis von 500 Metern zu Impfzentren oder Ordinationen bestimmt werden können. Die Datenverteilung kann als nahezu randominisiert bezeichnet werden, weshalb eine weitere nähere Betrachtung dieser Prädiktoren als nicht zielführend zu betrachten ist.
Nach Feststellung, dass den zuvor benannten Prädiktoren keinerlei Erklärungswert zukommt, wurde in weiterer Folge durch ein Trial-und-Error-Verfahren versucht bei anderen Variablen einen Erklärungswert für die Zielgrößen zu finden. Nach zahlreichen Versuchen konnte eine multiple lineare Regression festgestellt werden, bei der EDU_ALL (der Anteil der Bevölkerung die höchstens einen Pflichtabschluss haben) sowie der Anteil an abgegebenen FPÖ-Stimmen in der Nationalratswahl 2019 als sehr gut geeignete Prädiktoren für das Modell festgestellt werden.
lm_Vollimmunisierte_result <- lm(VollimmunisiertePro100 ~ EDU_ALL + fpoe , data = Data_Gesamt)
summary(lm_Vollimmunisierte_result)
##
## Call:
## lm(formula = VollimmunisiertePro100 ~ EDU_ALL + fpoe, data = Data_Gesamt)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.0335 -0.5662 0.2255 0.7879 1.7160
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 69.69430 2.11789 32.907 < 2e-16 ***
## EDU_ALL -0.74134 0.08186 -9.056 1.63e-08 ***
## fpoe 0.50484 0.19332 2.611 0.0167 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.071 on 20 degrees of freedom
## Multiple R-squared: 0.9369, Adjusted R-squared: 0.9306
## F-statistic: 148.4 on 2 and 20 DF, p-value: 1.004e-12
# Intercept: 69.69430
# EDU_ALL: -0.74134
# fpoe: 0.50484
Durch das Plotten der drei Variablen im dreidimensionalen Raum zeigt sich, dass von einer klaren Linearität zwischen den Werten ausgegangen werden kann.
Auch wenn dies nicht Ziel der Arbeit ist, so wurde aus Interesse noch der Frage nachgegangen, ob der Variable “Anteil der Bevölkerung mit Pflichtabschluss” (EDU_ALL) dazu dienen kann andere Variablen zu bestimmen?
Durch die graphische Gegenüberstellung von EDU_ALL konnte eine positive Korrelation zu den Wahlergebnissen der FPÖ sowie eine negative Korrelation zu der Liste Pilz und der ÖVP erkannt werden.
##
## Call:
## lm(formula = fpoe ~ EDU_ALL, data = Data_Gesamt)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.19193 -0.68028 0.09436 0.49359 2.84526
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 10.43342 0.72911 14.31 2.66e-12 ***
## EDU_ALL 0.38982 0.03609 10.80 4.95e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.209 on 21 degrees of freedom
## Multiple R-squared: 0.8474, Adjusted R-squared: 0.8402
## F-statistic: 116.7 on 1 and 21 DF, p-value: 4.947e-10
Vollimmunisiert korreliert stark mit: Pflichtschule, Lehre, AHS, Kolleg, Akademie, Universität, Einkommen, SPÖ, NEOS.
Vollimmunisiert korreliert nicht stark mit: Impfzentren und Ordinationen!
Es scheint so als gäbe es auch Multikollinarität zwischen den unterschiedlichen Variablen, da diese auch eine erhöhte Korrelation untereinander haben, z.B. NOES und Universität.
Jedoch ist erkennbar, dass die Vollimmunisierten mit einigen Parametern stark korrelieren und wir deshalb eine lineare Regression anstreben.
# Data/Data_Gesamt_Vollimmunisiert.rds
Data_Gesamt_Vollimmunisiert <- readRDS(file = "Data_Gesamt_Vollimmunisiert.rds")
round(cor(Data_Gesamt_Vollimmunisiert$VollimmunisiertePro100, Data_Gesamt_Vollimmunisiert),2)
## m0_18 m19_39 m40_64 m65 w0_18 w19_39 w40_64 w65 Pflichtschule Lehre
## [1,] -0.55 -0.17 -0.25 0.47 -0.52 0.1 0.38 0.51 -0.96 -0.66
## BMS AHS BHS Kolleg Akademie Universität Einkommen_Total
## [1,] -0.29 0.72 0.37 0.86 0.82 0.77 0.82
## Einkommen_Männer Einkommen_Frauen Bevölkerung VollimmunisiertePro100
## [1,] 0.8 0.88 -0.49 1
## ungültig ÖVP SPÖ FPÖ GRÜNE NEOS Pilz KPÖ Wandl BPÖ
## [1,] -0.63 0.43 -0.87 -0.58 0.37 0.85 0.51 -0.47 -0.42 -0.54
## Impfzentren_pro_Bez_Proz Ordination_pro_Bez_Proz Durchschnitt_Alter
## [1,] -0.17 -0.37 0.6
corrplot(cor(Data_Gesamt_Vollimmunisiert), order = 'hclust', addrect = 2, type = 'lower')
Wir erstellen ein lineares Regressionsmodell mithilfe der Funktion lm mit den unten angeführten Parametern. Es wurden nicht alle Parameter miteinbezogen, da das Modell sonst nicht funktionieren würde (überall NAN Werte, z.B. bei GRÜNE).
Die F-Statistik weißt einen p-Wert knapp unter 0,5 auf, deshalb wäre dieses Modell verwertbar. Da die Freiheitsgrade aber unter er vorgegebenen Grenze sich befinden, wird dieses Modell verworfen.
Es stellt sich nun die Frage, gibt es noch ein besseres Modell?
##
## Call:
## lm(formula = VollimmunisiertePro100 ~ m0_18 + m19_39 + m40_64 +
## m65 + w0_18 + w19_39 + w40_64 + Pflichtschule + Lehre + AHS +
## Kolleg + Akademie + Universität + Einkommen_Total + Einkommen_Männer +
## Einkommen_Frauen + Bevölkerung + ungültig + ÖVP + SPÖ + FPÖ,
## data = Data_Gesamt_Vollimmunisiert)
##
## Residuals:
## 1. Innere Stadt 2. Leopoldstadt 3. Landstraße 4. Wieden
## 0.0139953 0.0175450 -0.0908464 -0.0465548
## 5. Margareten 6. Mariahilf 7. Neubau 8. Josefstadt
## 0.0672033 -0.0693967 0.0757338 -0.0003448
## 9. Alsergrund 10. Favoriten 11. Simmering 12. Meidling
## 0.0186546 0.0012820 0.0166774 0.0903267
## 13. Hietzing 14. Penzing 15. Rudolfsheim-F. 16. Ottakring
## 0.0131552 0.0537152 -0.0015501 -0.0155154
## 17. Hernals 18. Währing 19. Döbling 20. Brigittenau
## -0.0321529 -0.0157513 0.0224648 -0.0708971
## 21. Floridsdorf 22. Donaustadt 23. Liesing
## -0.0077647 0.0152181 -0.0551970
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.057e+02 9.053e+01 1.167 0.451
## m0_18 7.885e-01 8.387e-01 0.940 0.520
## m19_39 -2.015e+00 5.820e-01 -3.462 0.179
## m40_64 3.356e-01 8.734e-01 0.384 0.766
## m65 -3.227e+00 1.058e+00 -3.050 0.202
## w0_18 -5.928e+00 1.276e+00 -4.647 0.135
## w19_39 2.485e-01 6.398e-01 0.388 0.764
## w40_64 -1.671e+00 5.568e-01 -3.001 0.205
## Pflichtschule -1.883e-01 2.000e-01 -0.942 0.519
## Lehre 1.329e+00 5.816e-01 2.284 0.263
## AHS -1.168e+00 3.473e-01 -3.363 0.184
## Kolleg -1.053e+00 2.011e+00 -0.523 0.693
## Akademie 8.965e+00 2.282e+00 3.928 0.159
## Universität 8.266e-01 3.661e-01 2.258 0.265
## Einkommen_Total -1.231e-02 3.703e-03 -3.323 0.186
## Einkommen_Männer 6.361e-03 1.763e-03 3.609 0.172
## Einkommen_Frauen 5.809e-03 2.161e-03 2.688 0.227
## Bevölkerung 3.049e-06 6.668e-06 0.457 0.727
## ungültig -9.076e+00 3.717e+00 -2.442 0.247
## ÖVP 4.633e-01 2.924e-01 1.585 0.358
## SPÖ 8.320e-01 3.064e-01 2.715 0.225
## FPÖ 2.529e-01 4.576e-01 0.553 0.679
##
## Residual standard error: 0.2196 on 1 degrees of freedom
## Multiple R-squared: 0.9999, Adjusted R-squared: 0.9971
## F-statistic: 359 on 21 and 1 DF, p-value: 0.04159
Die stepAIC Funktion lässt uns herausfinden, welche Variablen für unsere lineare Regression von größter Wichtigkeit sind, um unser Modell mit deutlich weniger unabhängigen Variablen darstellen zu können. Den Parameter scale setzen wir hierbei auf TRUE, damit die Variablen Z-skaliert werden und eine Rangfolge erkennbar ist. Wir lassen dabei das Modell in beide Richtungen laufen, also forward + backward, um das bestmöglichste Ergebnis zu erzielen.
Aus dem Modell lässt sich folgendes erkennen:
##
## Call:
## lm(formula = VollimmunisiertePro100 ~ Pflichtschule + Universität +
## m40_64 + Kolleg, data = Data_Gesamt_Vollimmunisiert)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.10288 -0.58777 0.01101 0.44481 1.31776
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 86.38442 5.53559 15.605 6.64e-12 ***
## Pflichtschule -0.65076 0.07150 -9.102 3.73e-08 ***
## Universität -0.12620 0.03271 -3.859 0.00115 **
## m40_64 -0.58414 0.24558 -2.379 0.02866 *
## Kolleg 3.83877 1.66954 2.299 0.03368 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.777 on 18 degrees of freedom
## Multiple R-squared: 0.9701, Adjusted R-squared: 0.9635
## F-statistic: 146.1 on 4 and 18 DF, p-value: 1.85e-13
Im Plot ist schön zu erkennen, dass die unabhängigen Variablen die abhängige Variable gut erklären. Die LOESS (Local Polynomial Regression Fitting) Linie nähert sich sehr gut an die Regressionsgerade an.
ggplot(Data_Gesamt_Vollimmunisiert, aes(y = VollimmunisiertePro100, x = (Pflichtschule * -0.65076 + Universität * -0.12620 + m40_64 * -0.58414 + Kolleg * 3.83877 + 86.38442))) +
geom_point() +
geom_smooth(method = 'lm', formula = y ~ x, color = "blue", se = FALSE)+
geom_smooth(method = "loess", formula = y ~ x, se = FALSE, color = "red") +
xlab("Unabhängige Variablen") + ylab("Vollimmunisierte")
Da bereits vorher angesprochen wurde, dass Multikollinaritäten vorkommen könnten, wollen wir diese für unser Modell noch einmal überprüfen. Dies geschieht mit dem VIF-Wert/VIF-Funktion.
Es ist zu erkennen, dass kein Prädikator über 10 oder unter 0,1 liegt, damit ist keine Multikollinarität für unser Modell gegeben.
vif(lm_Vollimmunisierte.bw)
## Pflichtschule Universität m40_64 Kolleg
## 9.505136 5.726922 1.042004 3.149684
Aus den Q-Q Plot ist zu erkennen, dass sich unser Modell einer Normalverteilung annähert. Des Weiteren ist am Plot “Residuals vs Leverage” zu erkennen, dass keiner unserer Beobachtungen außerhalb der Cook-Distanz liegt.
par(mfcol = c(2,2))
plot(lm_Vollimmunisierte.bw)
Mit unserem Modell wollen wir dann auch nochmals testen, ob es zur Vorhersage geeignet ist. Dabei haben wir uns für die k-fold Cross Validation entschieden, um die Güte unseres Vorhersagemodells bestimmen zu können.
Unser Datenset wird randomisiert und in 10 gleich große Gruppen gesplittet, dabei wird bei jedem Durchlauf eine Gruppe als Testgruppe ausgewählt und die anderen als Trainingsdaten. Das Ganze wird drei mal wiederholt.
Die Güte der Regression wird anhand der drei Kennzahlen RMSE, R² und MAE gemessen, dabei kommen diese zu dem folgendem Ergebnis:
# defining training control as
# repeated cross-validation and
# value of K is 10 and repetition is 3 times
trctrl <- trainControl(method = "repeatedcv", number = 10, savePredictions=TRUE, repeats = 3)
# training the model by assigning columns
# as target variable and rest other column
# as independent variable
nb_Vollimmunisiert_fit <- train(VollimmunisiertePro100 ~ Pflichtschule + Universität + m40_64 + Kolleg, data = Data_Gesamt_Vollimmunisiert, method = "lm", trControl=trctrl)
# printing model performance metrics
# along with other details
print(nb_Vollimmunisiert_fit)
## Linear Regression
##
## 23 samples
## 4 predictor
##
## No pre-processing
## Resampling: Cross-Validated (10 fold, repeated 3 times)
## Summary of sample sizes: 20, 20, 21, 20, 21, 21, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 0.8309619 0.9675241 0.7487259
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
Teilgeimpft korreliert stark mit: Pflichtschule, Lehre, AHS, Kolleg, Akademie, Universität, Einkommen, SPÖ, NEOS.
Teilgeimpft korreliert nicht stark mit: Impfzentren und Ordinationen!
Es scheint so als gäbe es auch Multikollinarität zwischen den unterschiedlichen Variablen, da diese auch eine erhöhte Korrelation untereinander haben, z.B. NOES und Universität.
Jedoch ist erkennbar, dass die Teilgeimpft mit einigen Parametern stark korrelieren und wir deshalb eine lineare Regression anstreben.
Data_Gesamt_Teilgeimpft <- readRDS(file = "Data_Gesamt_Teilgeimpft.rds")
round(cor(Data_Gesamt_Teilgeimpft$TeilgeimpftePro100, Data_Gesamt_Vollimmunisiert),2)
## m0_18 m19_39 m40_64 m65 w0_18 w19_39 w40_64 w65 Pflichtschule Lehre BMS
## [1,] -0.51 -0.19 -0.26 0.47 -0.48 0.08 0.41 0.5 -0.94 -0.62 -0.25
## AHS BHS Kolleg Akademie Universität Einkommen_Total Einkommen_Männer
## [1,] 0.68 0.41 0.86 0.81 0.74 0.81 0.79
## Einkommen_Frauen Bevölkerung VollimmunisiertePro100 ungültig ÖVP SPÖ
## [1,] 0.87 -0.45 1 -0.59 0.44 -0.84
## FPÖ GRÜNE NEOS Pilz KPÖ Wandl BPÖ Impfzentren_pro_Bez_Proz
## [1,] -0.54 0.34 0.82 0.49 -0.49 -0.42 -0.51 -0.16
## Ordination_pro_Bez_Proz Durchschnitt_Alter
## [1,] -0.36 0.59
corrplot(cor(Data_Gesamt_Teilgeimpft), order = 'hclust', addrect = 2, type = 'lower')
Wir erstellen ein lineares Regressionsmodell mithilfe der Funktion lm mit den unten angeführten Parametern. Es wurden nicht alle Parameter miteinbezogen, da das Modell sonst nicht funktionieren würde (überall NAN Werte, z.B. bei GRÜNE).
Die F-Statistik weißt einen p-Wert knapp über 0,5 auf und die Freheitsgrade sind ebenfalls unter dem vorgegebenen Grenzwert, deshalb ist dieses Modell nicht verwertbar.
Es stellt sich nun die Frage, gibt es noch ein besseres Modell?
lm_Teilgeimpfte <- lm(TeilgeimpftePro100 ~ m0_18 + m19_39 + m40_64 + m65 + w0_18 + w19_39 + w40_64 + Pflichtschule + Lehre + AHS + Kolleg + Akademie + Universität + Einkommen_Total + Einkommen_Männer + Einkommen_Frauen + Bevölkerung + ungültig + ÖVP + SPÖ + FPÖ, data = Data_Gesamt_Teilgeimpft)
summary(lm_Teilgeimpfte)
##
## Call:
## lm(formula = TeilgeimpftePro100 ~ m0_18 + m19_39 + m40_64 + m65 +
## w0_18 + w19_39 + w40_64 + Pflichtschule + Lehre + AHS + Kolleg +
## Akademie + Universität + Einkommen_Total + Einkommen_Männer +
## Einkommen_Frauen + Bevölkerung + ungültig + ÖVP + SPÖ + FPÖ,
## data = Data_Gesamt_Teilgeimpft)
##
## Residuals:
## 1. Innere Stadt 2. Leopoldstadt 3. Landstraße 4. Wieden
## 0.0151904 0.0190432 -0.0986039 -0.0505302
## 5. Margareten 6. Mariahilf 7. Neubau 8. Josefstadt
## 0.0729419 -0.0753226 0.0822008 -0.0003743
## 9. Alsergrund 10. Favoriten 11. Simmering 12. Meidling
## 0.0202475 0.0013914 0.0181015 0.0980398
## 13. Hietzing 14. Penzing 15. Rudolfsheim-F. 16. Ottakring
## 0.0142786 0.0583020 -0.0016825 -0.0168403
## 17. Hernals 18. Währing 19. Döbling 20. Brigittenau
## -0.0348985 -0.0170963 0.0243831 -0.0769511
## 21. Floridsdorf 22. Donaustadt 23. Liesing
## -0.0084278 0.0165176 -0.0599104
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.646e+02 9.826e+01 1.675 0.343
## m0_18 6.097e-01 9.103e-01 0.670 0.624
## m19_39 -2.092e+00 6.317e-01 -3.311 0.187
## m40_64 -3.855e-01 9.479e-01 -0.407 0.754
## m65 -3.177e+00 1.148e+00 -2.767 0.221
## w0_18 -5.547e+00 1.385e+00 -4.006 0.156
## w19_39 -1.776e-01 6.944e-01 -0.256 0.841
## w40_64 -1.513e+00 6.043e-01 -2.503 0.242
## Pflichtschule -2.494e-01 2.170e-01 -1.149 0.456
## Lehre 7.686e-01 6.313e-01 1.217 0.438
## AHS -9.941e-01 3.770e-01 -2.637 0.231
## Kolleg -1.109e+00 2.183e+00 -0.508 0.701
## Akademie 5.929e+00 2.477e+00 2.393 0.252
## Universität 4.632e-01 3.974e-01 1.166 0.451
## Einkommen_Total -9.700e-03 4.019e-03 -2.413 0.250
## Einkommen_Männer 4.948e-03 1.913e-03 2.586 0.235
## Einkommen_Frauen 4.654e-03 2.346e-03 1.984 0.297
## Bevölkerung 7.087e-06 7.237e-06 0.979 0.507
## ungültig -8.735e+00 4.034e+00 -2.165 0.275
## ÖVP 2.235e-01 3.173e-01 0.704 0.609
## SPÖ 5.019e-01 3.326e-01 1.509 0.373
## FPÖ 3.720e-01 4.966e-01 0.749 0.591
##
## Residual standard error: 0.2384 on 1 degrees of freedom
## Multiple R-squared: 0.9998, Adjusted R-squared: 0.9947
## F-statistic: 198 on 21 and 1 DF, p-value: 0.05599
Die stepAIC Funktion lässt uns herausfinden, welche Variablen für unsere lineare Regression von größter Wichtigkeit sind, um unser Modell mit deutlich weniger unabhängigen Variablen darstellen zu können. Den Parameter scale setzen wir hierbei auf TRUE, damit die Variablen Z-skaliert werden und eine Rangfolge erkennbar ist. Wir lassen dabei das Modell in beide Richtungen laufen, also forward + backward, um das bestmöglichste Ergebnis zu erzielen.
Aus dem Modell lässt sich folgendes erkennen:
# ausgeklammert von CHW
lm_Teilgeimpfte1 <- lm(TeilgeimpftePro100~1, data = Data_Gesamt_Teilgeimpft)
lm_Teilgeimpfte.bw <- stepAIC(lm_Teilgeimpfte1, direction = "both", trace = FALSE, scale = TRUE,
scope=list(lower = lm_Teilgeimpfte1, upper = lm_Teilgeimpfte))
summary(lm_Teilgeimpfte.bw)
##
## Call:
## lm(formula = TeilgeimpftePro100 ~ Pflichtschule + Universität +
## m40_64 + Kolleg, data = Data_Gesamt_Teilgeimpft)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.02078 -0.59773 0.02086 0.45462 1.13144
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 88.90704 5.22830 17.005 1.55e-12 ***
## Pflichtschule -0.53675 0.06753 -7.948 2.69e-07 ***
## Universität -0.12368 0.03089 -4.004 0.000832 ***
## m40_64 -0.56987 0.23195 -2.457 0.024395 *
## Kolleg 3.64361 1.57686 2.311 0.032909 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7339 on 18 degrees of freedom
## Multiple R-squared: 0.959, Adjusted R-squared: 0.9499
## F-statistic: 105.2 on 4 and 18 DF, p-value: 3.174e-12
Im Plot ist schön zu erkennen, dass die unabhängigen Variablen die abhängige Variable gut erklären. Die LOESS (Local Polynomial Regression Fitting) Linie nähert sich sehr gut an die Regressionsgerade an.
# ausgeklammert von CHW
ggplot(Data_Gesamt_Teilgeimpft, aes(y = TeilgeimpftePro100, x = (Pflichtschule * -0.53675 + Universität * -0.12368 + m40_64 * -0.56987 + Kolleg * 3.64361 + 88.90704))) +
geom_point() +
geom_smooth(method = 'lm', formula = y ~ x, color = "blue", se = FALSE)+
geom_smooth(method = "loess", formula = y ~ x, se = FALSE, color = "red") +
xlab("Unabhängige Variablen") + ylab("Teilgeimpfte")
Da bereits vorher angesprochen wurde, dass Multikollinaritäten vorkommen könnten, wollen wir diese für unser Modell noch einmal überprüfen. Dies geschieht mit dem VIF-Wert/VIF-Funktion.
Es ist zu erkennen, dass kein Prädikator über 10 oder unter 0,1 liegt, damit ist keine Multikollinarität für unser Modell gegeben.
vif(lm_Teilgeimpfte.bw)
## Pflichtschule Universität m40_64 Kolleg
## 9.505136 5.726922 1.042004 3.149684
Aus den Q-Q Plot ist zu erkennen, dass sich unser Modell einer Normalverteilung annähert, jedoch etwas schlechter als bei den Vollimmunisierten. Des Weiteren ist am Plot “Residuals vs Leverage” zu erkennen, dass keiner unserer Beobachtungen außerhalb der Cook-Distanz liegt.
par(mfcol = c(2,2))
plot(lm_Teilgeimpfte.bw)
Mit unserem Modell wollen wir dann auch nochmals testen, ob es zur Vorhersage geeignet ist. Dabei haben wir uns für die k-fold Cross Validation entschieden, um die Güte unseres Vorhersagemodells bestimmen zu können.
Unser Datenset wird randomisiert und in 10 gleich große Gruppen gesplittet, dabei wird bei jedem Durchlauf eine Gruppe als Testgruppe ausgewählt und die anderen als Trainingsdaten. Das Ganze wird drei mal wiederholt.
Die Güte der Regression wird anhand der drei Kennzahlen RMSE, R² und MAE gemessen, dabei kommen diese zu dem folgendem Ergebnis:
# defining training control as
# repeated cross-validation and
# value of K is 10 and repetition is 3 times
trctrl <- trainControl(method = "repeatedcv", number = 10, savePredictions=TRUE, repeats = 3)
# training the model by assigning columns
# as target variable and rest other column
# as independent variable
nb__Teilgeimpft_fit <- train(TeilgeimpftePro100 ~ Pflichtschule + Universität + m40_64 + Kolleg, data = Data_Gesamt_Teilgeimpft, method = "lm", trControl=trctrl)
# printing model performance metrics
# along with other details
print(nb__Teilgeimpft_fit)
## Linear Regression
##
## 23 samples
## 4 predictor
##
## No pre-processing
## Resampling: Cross-Validated (10 fold, repeated 3 times)
## Summary of sample sizes: 21, 21, 21, 21, 21, 20, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 0.7574743 0.9679258 0.6713474
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
Als Resümee kann geschlossen werden, dass sich die abhängigen Variablen Teilgeimpfte und Vollimmunisierte sehr gut durch eine lineare Regression mit den Prädiktoren Pflichtschule, Universität, männlich 40 - 64 Jahre und Kolleg erklären lassen.
Es gibt keine Hinweise, die darauf schließen lassen, dass es zwischem dem Modell der Vollimmunisierte und dem Modell der Teilgeimpften wesentliche Unterschiede gibt. Beide sind durch diesselben Variablen erklärbar und die Modelle weisen eine ungefähr gleich gute Güte auf.
Ebenso ist anzumerken, dass die geografischen Variblen keinen gute Erklärbarkeit für die Impfquote liefern können.